2011-11-24 21 views
5

Estoy tratando de escribir un vbscript para automatizar la configuración de una matriz de almacenamiento. Tengo algunas dificultades para descubrir la mejor forma de navegar el XML.leyendo el archivo xml con vbscript

una sección de ejemplo de mi XML:

<SERVER> 
<INTERFACE> 
<PORT>0</PORT> 
<IPADDRESS>192.168.1.1</IPADDRESS> 
<NETMASK>255.255.255.0</NETMASK> 
</INTERFACE> 
<INTERFACE> 
<PORT>1</PORT> 
<IPADDRESS>192.168.1.2</IPADDRESS> 
<NETMASK>255.255.255.0</NETMASK> 
</INTERFACE> 
</SERVER> 

por lo que quiero recorrer cada interfaz (hay 5 en la realidad) y establecer la IP y máscara de red correspondiente de la interfaz correcta.

que estoy haciendo actualmente esto:

Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
objXMLDoc.async = False 
objXMLDoc.load("example.xml") 

Set Root = objXMLDoc.documentElement 
Set NodeList = Root.getElementsByTagName("interface") 
port = 0 
For Each Elem In NodeList 
WScript.Echo "Port " & port & " has IP address of " & Elem.text 
port = port + 1 
Next 

pero debe haber una forma más limpia no hacer esto donde puedo seleccionar la sección de interfaz y leer en el puerto, IPADDRESS & máscara de red, emita el comando y luego pasar a la siguiente interfaz?

Gracias.

Respuesta

5

Primera aproximación:

For Each Elem In NodeList 
    SET port = Elem.getElementsByTagName("Port")(0) 
    SET ip = Elem.getElementsByTagName("IPADDRESS")(0) 
    WScript.Echo "Port " & port.nodeValue & " has IP address is " & ip.nodeValue 
Next 
1

Esto funciona para mí:

sub main 
    Set nodeList = xmlDoc.documentElement.selectNodes("//interface") 

    For Each node in nodeList 
     handleNode(node) 
    Next 
end sub 

sub handleNode(node) 
    Dim port, ipaddress, netmask, attribute 

    For each elem in node.childNodes 
     Select Case node.tagName 
      Case "port" 
       port = elem.text 
      Case "ipaddress" 
       ipaddress = elem.text 
      Case "netmask" 
       netmask = elem.text 
      Case "tag with attributes" 
       attribute = elem.getAttribute("attributeName") 
     End Select 
    Next 

    WScript.Echo "Port " & port & " has IP address of " & ipaddress & " and useful attribute " & attribute 

end sub