从节点列表中获取第一个节点的属性名称项

时间:2016-12-21 12:46:09

标签: xml excel vba excel-vba

以下代码将打印出来: “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>

1 个答案:

答案 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