2012-10-15 100 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