以下代码将打印出来: “GAL”
有没有选项可以使用“xDoc.SelectNodes”打印相同的输出 但没有'列表中的每个节点'? 因为我知道父母只会是一个节点,所以我觉得我必须使用这个''for'并定义新的变量('node') 谢谢你的帮助!
VBA:
Dim xDoc As DOMDocument
Set xDoc = New DOMDocument
xDoc.Load ("C:\....\example2.xml")
Set list = xDoc.SelectNodes("/animal/cat[(@ID)=""17""]")
Dim attr As IXMLDOMAttribute
Dim node As IXMLDOMNode
Dim childNode As IXMLDOMNode
For Each node In list
Debug.Print node.Attributes.getNamedItem("Name").Text
Next node
XML:
<animal>
<dog ID="16" Name="Lucy"/>
<cat ID="156" Name="Chloe"/>
<cat ID="17" Name="GAL">
<child ID="173" Name="Tigger"/>
<child ID="1256" Name="Angel"/>
<child ID="256" Name="Peanut"/>
</cat>
<cat ID="18" Name="Charlie">
<child ID="173" Name="Smokey"/>
</cat>
</animal>
答案 0 :(得分:3)
我不知道为什么你提出了一个新问题,这是重新审视昨天的Read XML child node Attribute on VBA with oDOC
无论如何,如果你在运行一个项目的循环中遇到问题(坦白说,我不知道为什么),那么你可以检查length
对象的list
。
If list.length=1 Then
List.item(0).Attributes.getNamedItem("Name").Text
Else
'Do the loop
End If
难道你不能只添加一条评论说你希望for循环可以在一个项目上运行吗?
重写代码
Sub Tst()
Dim xDoc As MSXML2.DOMDocument60
Set xDoc = New MSXML2.DOMDocument60
xDoc.Load ThisWorkbook.Path & "\example2.xml" '<---- my path is different
Dim oSingular As MSXML2.IXMLDOMNode
Set oSingular = xDoc.SelectSingleNode("/animal/cat[(@ID)=""17""]")
Debug.Print oSingular.Attributes.getNamedItem("Name").Text
' Set List = xDoc.SelectNodes("/animal/cat[(@ID)=""17""]")
' Dim attr As IXMLDOMAttribute
' Dim node As IXMLDOMNode
' Dim childNode As IXMLDOMNode
'
' For Each node In List
' Debug.Print node.Attributes.getNamedItem("Name").Text
' Next node
End Sub