我有一个XML文件,其中有许多具有相同名称的节点。我需要访问特定节点,不是通过其名称,也不是通过其属性,而是通过XML文件中的顺序。例如:
<category field="X"/>
<class LN="RF"/>
<category field="Y"/>
<p name="state"/>
<category field="Z"/>
<category field="A"/>
所以我需要到达节点<category field="Z"/>
,例如不是因为它的属性是="Z"
,而是因为它的 订单 是第三个category
个节点组。
答案 0 :(得分:3)
将节点出现与XPath的[]
或position()
函数一起使用:
Public Sub XMLData()
Dim XmlFile
Dim doc, item
Dim fso, stdout
Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)
XmlFile = "C:\Path\To\xmlfile.xml"
doc.Load XmlFile
For Each item In doc.SelectNodes("//category[3]") 'OR //category[position()=3]'
stdout.WriteLine item.Attributes.ItemOf("field").InnerText
Next
Set fso = Nothing
End Sub
答案 1 :(得分:0)
使用XPath expression选择<category>
个节点,然后使用item
方法从结果集合中选择第n个元素:
xmldata = "<root>" & _
"<category field=""X""/>" & _
"<class LN=""RF""/>" & _
"<category field=""Y""/>" & _
"<p name=""state""/>" & _
"<category field=""Z""/>" & _
"<category field=""A""/>" & _
"</root>"
Set xml = CreateObject("Msxml2.DOMDocument")
xml.async = False
xml.loadXml xmldata
If xml.parseError <> 0 Then
WScript.Echo xml.parseError.Reason
WScript.Quit xml.parseError
End If
Set categories = xml.selectNodes("//category")
Set thirdCategory = nodes.item(2)
WScript.Echo node.getAttribute("field")
请注意,索引是从零开始的,因此您需要将索引2用于第三个元素。