检索VBS中的XML属性的值

Vij*_*Nag 4 vbscript xml-attribute xml-parsing

<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>
Run Code Online (Sandbox Code Playgroud)

从上面的XML文档中,我的目标是从VBScript替换属性default server和default domain的IP地址.

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

NodeList(i).nodeName 
Run Code Online (Sandbox Code Playgroud)

将名称命名为Parameter,并NodeList(i).Text为我提供4,IP地址,管理员等值.但是我无法获取属性名称,因此我可以直接更改属性的值.

Che*_*vel 5

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

NodeList(i).getAttribute("Name")
Run Code Online (Sandbox Code Playgroud)

您还可以在SelectNodes调用中向XPath表达式添加谓词,以仅检索所需的元素:

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

这样,您就不必检索并遍历您不感兴趣的Parameter节点.


Aar*_*k71 2

有点生疏,但我认为您可以使用它通过节点名检索节点值:

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
Run Code Online (Sandbox Code Playgroud)

并设置它,可能

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
Run Code Online (Sandbox Code Playgroud)