2013-07-05 117 views
3

我在下面有一個XML文件。我想通過這個文件循環並提取節點的節點值,如節點<com>獲取名稱值,然後循環2次以獲取文件值。我目前可以獲得節點<com>的值,但我不確定如何循環並獲取文件節點的值。通過XML文件元素循環

<common> 
    <com name="Test1.css"> 
    <file name="Tech.css"/> 
    <file name="Comp.css"/> 
    </com> 
    <com name="Test2.css"> 
    <file name="HR.css"/> 
    <file name="HR2.css"/> 
    </com> 
</common> 
Dim xmlDoc, objNodeList, plot 
Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load("C:\test\combineXML.xml") 
WScript.Echo xmlDoc.parseError 
Set objNodeList = xmlDoc.getElementsByTagName("com") 
If objNodeList.length > 0 then 
    For each x in objNodeList 
     JobName = x.getattribute("name") 
     WScript.Echo JobName 
    Next 
End If 

回答

4

可以使用.ChildNodes物業

Dim xmlDoc, objNodeList, plot 
dim fileNodes 
dim comNodeItem 
dim fileNodeItem 
dim fileName, jobName 

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 

xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load("C:\test\combineXML.xml") 

WScript.Echo xmlDoc.parseError 

Set objNodeList = xmlDoc.getElementsByTagName("com") 

For each comNodeItem in objNodeList 
    JobName = comNodeItem.getAttribute("name") 
    for each fileNodeItem in comNodeItem.ChildNodes 
     fileName = fileNodeItem.getAttribute("name") 
     WScript.Echo JobName & ": " & fileName 
    next 
Next 

這將工作,如果該文件是爲你的例子一樣簡單。如果只想file節點進行處理,和其他人忽略,你也可以只是再次使用:

for each fileNodeItem in comNodeItem.getElementsByTagName("file") 
+0

Perfect..Thank能跟大家這麼多 – user505210

4

你正在做這個太複雜了。只需選擇從所有com節點的子節點name屬性XPath表達式:

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.async = False 
xmlDoc.load "C:\test\combineXML.xml" 
If xmlDoc.parseError = 0 Then 
    For Each x In xmlDoc.selectNodes("//com/*/@name") 
    WScript.Echo x.text 
    Next 
End If 

使用//com/file/@name如果需要表達更具體的(如果有一個name屬性其他子節點

如果您還希望從父節點的屬性,你就必須修改它是這樣的:

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.async = False 
xmlDoc.load "C:\test\combineXML.xml" 
If xmlDoc.parseError = 0 Then 
    For Each x In xmlDoc.selectNodes("//com/*") 
    WScript.Echo x.parentNode.getAttribute("name") & ": " _ 
     & x.getAttribute("name") 
    Next 
End If 
+0

非常nice..how可我也得到次e節點的值..我想要這樣的結果test1 tech.css comp.css然後test2.css HR.css HR2.css – user505210