我下面有一个XML文件.我想循环遍历此文件并提取节点节点值,就像节点<com>获取名称值然后循环2次以获取文件值.我现在可以获取节点的值,<com>但不确定如何循环内部并获取文件节点的值.
<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>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你这太复杂了.只需使用XPath表达式name从所有com节点的子节点中选择属性:
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
Run Code Online (Sandbox Code Playgroud)
使用//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
Run Code Online (Sandbox Code Playgroud)