Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Tratar un archivo XML desde vb6

Estas en el tema de Tratar un archivo XML desde vb6 en el foro de Visual Basic clásico en Foros del Web. Buenas, Necesito tratar un archivo XML desde Visual Basic, es decir, necesito una aplicación que sea capaz de leer, modificar y agregar datos al archivo ...
  #1 (permalink)  
Antiguo 23/09/2009, 08:20
Avatar de oso_cat  
Fecha de Ingreso: septiembre-2009
Ubicación: Granollers
Mensajes: 18
Antigüedad: 14 años, 8 meses
Puntos: 0
Tratar un archivo XML desde vb6

Buenas,

Necesito tratar un archivo XML desde Visual Basic, es decir, necesito una aplicación que sea capaz de leer, modificar y agregar datos al archivo XML.

El archivo XML es del tipo:

<ASP>
- <NLB>
<SERVER p1="0" p2="xxx" p3="80" p4="xx.xx.xx.xx">NOMBRE1</SERVER>
<SERVER p1="0" p2="xxx" p3="80" p4="xx.xx.xx.xx">NOMBRE2</SERVER>
<SERVER p1="0" p2="xxx" p3="80" p4="xx.xx.xx.xx">NOMBRE3</SERVER>
<SERVER p1="0" p2="xxx" p3="80" p4="xx.xx.xx.xx">NOMBRE4</SERVER>
<SERVER p1="0" p2="xxx" p3="80" p4="xx.xx.xx.xx">NOMBRE5</SERVER>
</NLB>
</ASP>

Tengo el siguiente código, que carga los nodos del XML en un ubgrid.
No sé si es del todo correcto, ya que obtengo un error del tipo "Object variable or With block variable not set" donde pongo el texto marcado a color:


************************************************** ***************
Dim ruta As String
Dim row As Integer
Dim documento As MSXML2.DOMDocument30
Set documento = New DOMDocument30

Dim Node As MSXML2.IXMLDOMNode
Dim xmlnlb As MSXML2.IXMLDOMNode
Dim srv As MSXML2.IXMLDOMElement
Dim state As MSXML2.IXMLDOMAttribute
Dim version As MSXML2.IXMLDOMAttribute
Dim max As MSXML2.IXMLDOMAttribute
Dim ip As MSXML2.IXMLDOMAttribute


'EDITAMOS EL GRID DE SERVIDORES
'******************************
grdnlb.AutoSetup 1, 5, True, True, "Servidor |Activo |Versión |Máx. Conexiones |Dirección IP "

'servidor
grdnlb.ColWidth(1) = 100
'activo
grdnlb.ColWidth(2) = 45
'version
grdnlb.ColWidth(3) = 70
'max conexiones
grdnlb.ColWidth(4) = 100
'IP
grdnlb.ColWidth(5) = 110

'columna con checkbox
grdnlb.ColMask(2) = 4

'para la columna que tiene el DropDown
grdnlb.AddLookup 3, "ekon3", "1"
grdnlb.AddLookup 3, "ekon5", "2"


'cargamos el archivo
'********************
ruta = "\\filesrvk\webs\wwwASP\conf.xml"
documento.Load (ruta)

Set xmlnlb = documento.selectSingleNode("//NLB")

grdnlb.rows = 1
row = 0

For Each Node In xmlnlb.childNodes
'On Error Resume Next
row = row + 1

grdnlb.TextMatrix(row, 1) = xmlnlb.childNodes(row).Text
If xmlnlb.childNodes(row).Attributes(0).Text = "1" Then
grdnlb.TextMatrix(row, 2) = 1
End If

grdnlb.TextMatrix(row, 3) = xmlnlb.childNodes(row).Attributes(1).Text
grdnlb.TextMatrix(row, 4) = xmlnlb.childNodes(row).Attributes(2).Text
grdnlb.TextMatrix(row, 5) = xmlnlb.childNodes(row).Attributes(3).Text

If grdnlb.TextMatrix(row, 1) = "" Then grdnlb.RemoveItem (row)


'Set state = srv.Attributes(1)
'Set version = srv.Attributes(2)
'Set max = srv.Attributes(3)
'Set ip = srv.Attributes(4)

grdnlb.rows = grdnlb.rows + 1
Next
************************************************** ***************
Si pongo un "on error resume next" el grid me muestra perfectamente los datos en su sitio, pero me mosquea el error...


Acepto sugerencias, sobre como tratar el archivo, ya que voy descubriendo sobre la marcha....

Gracias anticipadas!
  #2 (permalink)  
Antiguo 23/09/2009, 08:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Tratar un archivo XML desde vb6

En lugar de usar xmlnlb.childNodes(row) usa Node, que en cada paso del For Each será el siguiente nodo hijo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 23/09/2009, 10:53
Avatar de oso_cat  
Fecha de Ingreso: septiembre-2009
Ubicación: Granollers
Mensajes: 18
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Tratar un archivo XML desde vb6

Perfecto! Me ha funcionado!
Muchas gracias!


Pero tengo otra pregunta....

Existe alguna manera de llamar a las propiedades de un nodo por el nombre de la propiedad en vez de por el número de ítem?

Es decir, siguiendo el ejemplo anterior, para coger la propiedad "p1" del archivo XML hago:
Node.Attributes(0).Text
Podría realizar algo parecido a
Node.Attributes("p1").Text ¿?¿?¿?
Gracias de nuevo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:56.