Вы хотите перебрать выборку, возвращаемую 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