2012-10-15 44 views
3
<Requirement Description="description" Operation="Configure"> 
    <Action ID="1000" Name="Split"> 
    <Contract> 
     <Parameter Name="Version">4</Parameter> 
     <Parameter Name="DefaultServer">192.168.00.</Parameter> 
     <Parameter Name="DefaultUser">administrator</Parameter> 
     <Parameter Name="DefaultPassword">password</Parameter> 
     <Parameter Name="DefaultDomain">192.168.00.00</Parameter> 
     <Parameter Name="Split">1</Parameter> 
    </Contract> 
    </Action> 
</Requirement> 

从上述XML文档中,我的目标是用VBScript替换属性默认服务器和默认域的IP地址。检索VBS中XML属性的值

Set objXMLDoc = CreateObject("Microsoft.XMLDOM") 
objXMLDoc.async = False 
objXMLDoc.load(XMLFullPath) 
Set NodeList = objXMLDoc.documentElement.SelectNodes("//Parameter") 

NodeList(i).nodeName 

给名称作为参数,NodeList(i).Text给我4个值,IP地址,管理员和其他值。但是我无法获取属性名称,因此我可以直接更改该属性的值。

回答

1

有点生疏,但我认为你可以用它来获取由节点名的的nodeValue:

Function getTag(nList, nName) 
    Dim i 
    i = 0 
    Do while i < nList.childNodes.length 
     if (nList.childNodes(i).nodeName = nName) then 
      getTag = nList.childNodes(i).childNodes(0).text 
      Exit Function 
     end if 
     i = i + 1 
    Loop 
End Function 

并设置它,可能

Sub setTag(nList, nName, val) 
    Dim i 
    i = 0 
    Do while i < nList.childNodes.length 
     if (nList.childNodes(i).nodeName = nName) then 
      nList.childNodes(i).childNodes(0).text = val 
      Exit Sub 
     end if 
     i = i + 1 
    Loop 
End Sub 
+0

嗨。 –

+1

set obj = NodeList(i).attributes这给出了属性的所有值。谢谢:) –

+0

哦......我的头撞在桌子上,现在我没有仔细阅读你的问题。 – AardVark71

5

要回答你的问题,你可以使用该getAttribute函数访问属性的值:

NodeList(i).getAttribute("Name") 

您也可以在您的通话SelectNodes添加谓词XPath表达式仅检索所需的元素:

Set NodeList = objXMLDoc.documentElement.SelectNodes("//Parameter[@Name = 'DefaultServer' or @Name = 'DefaultDomain']") 

这样,您就不必通过参数节点来检索和循环,你”对此没有兴趣。

+0

getAttribute(“”)是我在其中一个脚本上丢失的东西。感谢您的参考。 – ssaviers