您希望迭代下面显示的xpath返回的选择。它本质上是一个包含属性节点的节点集。
Option Explicit
Public Sub main()
Dim doc As New MSXML2.DOMDocument60
doc.LoadXML ( _
"<items>" & _
" <item id='1000'><name val='ABC'/><name val='DEF'/><name val='GHI'/><foo>xxx</foo></item>" & _
" <item id='1001'><name val='JKL'/><name val='MNO'/><name val='PQR'/><bar>yyy</bar></item>" & _
" <item id='1002'><name val='STU'/><name val='VWX'/><name val='YZ.'/><baz>zzz</baz></item>" & _
"</items>")
Dim items As IXMLDOMSelection, item As Object
Set items = doc.SelectNodes("//*[@id='1002']/name/@*") 'all attribs. Or, //*[@id='1002']/name/@val for only val attributes
For Each item In items
Debug.Print item.text
Next
End Sub
如果您想要更详细的方法
Option Explicit
Public Sub main()
Dim doc As New MSXML2.DOMDocument60
doc.LoadXML ( _
"<items>" & _
" <item id='1000'><name val='ABC'/><name val='DEF'/><name val='GHI'/><foo>xxx</foo></item>" & _
" <item id='1001'><name val='JKL'/><name val='MNO'/><name val='PQR'/><bar>yyy</bar></item>" & _
" <item id='1002'><name val='STU'/><name val='VWX'/><name val='YZ.'/><baz>zzz</baz></item>" & _
"</items>")
Dim item As Object, attrib As Object, child As Object
Set item = doc.SelectSingleNode("//*[@id='1002']")
For Each child In item.ChildNodes
For Each attrib In child.Attributes
If attrib.name = "val" Then Debug.Print attrib.name, attrib.text
Next
Next
End Sub
For Each child In item.ChildNodes
If child.BaseName = "name" And child.getAttribute("val") <> vbNullString Then Debug.Print child.getAttribute("val")
Next