如何按编号(订单)到达特定的XML节点?

时间:2015-09-25 14:37:03

标签: xml vbscript xml-parsing

我有一个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个节点组。

2 个答案:

答案 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用于第三个元素。