3

我在下面有一个 XML 文件。我想遍历这个文件并提取节点节点值,比如 for node<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>
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

2 回答 2

5

你把这弄得太复杂了。只需使用 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

如果//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
于 2013-07-05T07:45:20.690 回答
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")
于 2013-07-05T07:40:17.480 回答