** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Recorrer Nodos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRecorrer Nodos

 Responder Responder
Autor
Mensaje
Cooltan Ver desplegable
Nuevo
Nuevo


Unido: 29/Septiembre/2016
Localización: Spain
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Tema: Recorrer Nodos
    Enviado: 05/Julio/2017 a las 12:56
Buenos días,

Tengo un problemilla a ver si me puede ayudar.

Tengo un archive .xml y estoy obteniendo la información a traves de una matriz, y claro tengo unos nodo que a veces tiene 1 nodo hijo, y a veces más, entonces, yo extraigo la info de 1 nodo hijo sin problema, pero cuando hay mas de uno, no se como puedo sacarlo, te pongo la estructura y el código a ver si me puedes exar un cable.



Y este es el trozo de código que uso para almacenar la información que hay en la pestaña SAPVATCODE que en este ejemplo pone 0,00%

-<AVATLIST>
-<VAT>
<NET>40</NET>
<BRUT>40</BRUT>
<VATPERC>0</VATPERC>
<VATCODE>1</VATCODE>
<VAPVATCODE>0,00%</SAPVATCODE>
</VAT>

-<VAT>
<NET>40</NET>
<BRUT>40</BRUT>
<VATPERC>0</VATPERC>
<VATCODE>1</VATCODE>
<VAPVATCODE>7,00%</SAPVATCODE>
</VAT>
</AVATLIST>



    Set nodes = Oxmlfile.SelectNodes("//AINVOICELIST/INVOICE/AVATLIST/*")
     aux_node = nodes.Length ' Hallamos la longitud del nodo
     suma = suma + aux_node ' Con esta instrucción vamos incrementando la matriz a medida que se van tratando nuevos ficheros.
     ReDim Preserve arrPad1(1 To suma) ' Aqui incrementamos la matriz al valor dado por suma que se obtiene en la instrucción anterior.
     aux_node = idxAnt ' Con esta instrucción asignamos a aux2 la siguiente posición de la matriz para insertar los datos.
       
      For Each node1 In nodes ' Recorremos de forma iterativa para hallar los datos siguientes.
             arrPad1(aux_node).IGIC = node1.SelectSingleNode("SAPVATCODE").nodeTypedValue()
             aux_node = aux_node + 1
     Next



Que pasa que hay veces que dentro del nodo <AVATLIST> tengo mas de un hijo <VAT> y necesito guardarlos. En el código que he puesto si hay solo un nodo hijo me lo guarda sin problema, pero si tengo dos el Segundo ya no me lo guarda.

Que puedo hacer? mil gracias por adelantado.
Saludos
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador


Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1766
Enlace directo a este mensaje Enviado: 05/Julio/2017 a las 14:12
Sin entrar a mirar tu función... ¿ese XML está bien?:

-<AVATLIST>
-<VAT>
<NET>40</NET>
<BRUT>40</BRUT>
<VATPERC>0</VATPERC>
<VATCODE>1</VATCODE>
<VAPVATCODE>0,00%</SAPVATCODE>
</VAT>

... te lo digo porque abre con VAPVATCODE (con "V") pero cierra con SAPVATCODE (con "S")... a ver si va a venir por ahí tu problema.

Saludos.


Editado por OmniPresente - 05/Julio/2017 a las 14:13
Arriba
Cooltan Ver desplegable
Nuevo
Nuevo


Unido: 29/Septiembre/2016
Localización: Spain
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 05/Julio/2017 a las 14:41
Perdon se me fue la V se me borro al copiarlo y no me di cuenta, es SAPVATCODE como el final, en el xml viene bien, me equivoque yo al copiarlo.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9378
Enlace directo a este mensaje Enviado: 05/Julio/2017 a las 15:30
Échale un vistacito a esto:

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4222
Enlace directo a este mensaje Enviado: 05/Julio/2017 a las 15:40
Hola Jesús no se por que pero dos de tres enlaces están caídos, en tu página, pero con la que funciona es suficiente para que se de una buena idea. solo que recuerde: El método selectNodes devuelve una lista de nodos por eso declaramos IXMLDOMNodeList y creamos un bucle para poder devolver los nodos hijos, en este ejemplo que te pone el Sr. Mihura es el ejemplo perfecto:

Sub FindNode()
           Dim oXmlDoc As DOMDocument
           Dim oXmlNode As IXMLDOMNode
           Dim oXmlNodes As IXMLDOMNodeList

           Set oXmlDoc = New DOMDocument
           oXmlDoc.async = False
           oXmlDoc.Load (ThisWorkbook.Path & "\EmployeeSales.xml")

           Set oXmlNodes = oXmlDoc.SelectNodes("//Employee[InvoiceAmount>3000]")
           For Each oXmlNode In oXmlNodes
           Debug.Print oXmlNode.Text
           Next
End Sub

Saludos.



Arriba
Cooltan Ver desplegable
Nuevo
Nuevo


Unido: 29/Septiembre/2016
Localización: Spain
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 17/Julio/2017 a las 14:58
Muchas Gracias Emiliove y a todos.
Arriba
Cooltan Ver desplegable
Nuevo
Nuevo


Unido: 29/Septiembre/2016
Localización: Spain
Estado: Sin conexión
Puntos: 36
Enlace directo a este mensaje Enviado: 17/Julio/2017 a las 14:58
doy por concluido este tema. Gracias, no se como cerrarlo, si me dicen como gracias
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable