2013-07-05 122 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