VBA:从xml获取属性名称

时间:2013-06-18 13:13:37

标签: excel-vba vba excel

如何从vba中的xml以下获取所有属性名称,我试图动态收集属性名称而不是excel中的硬编码,属性名称可能会增加或减少。

<Doc a="1" b="2">
    <Doc1 aa="1" bb="2" cc="3" dd="4"/>
    <Doc1 aa="1" bb="2" cc="3" dd="4" ee="5"/>
    <Doc1 aa="1" bb="2" cc="3" dd="4"/>
    <Doc1 aa="1" bb="2" cc="3" dd="4" ff="6"/>
    <Doc1 aa="1" bb="2" cc="3" dd="4" gg="7"/>
</Doc>

请建议我。

1 个答案:

答案 0 :(得分:0)

XML始终是一个挑战....您的阅读代码高度依赖于编写代码,并希望它永远不会改变。你的消息来源是陌生人之一。

我总是不得不在网上搜索以找到这些问题的解决方案,通常这些帖子与我手边的XML工具版本不一致。通常,您可以使用IDE查看对象库,并找到与帖子中找到的属性和方法相对应的属性和方法。在Excel中,F2会显示对象浏览器,您可以查看MSXML2库。

            Sub test()
                ' add reference to MSXML v6
                'http://msdn.microsoft.com/en-us/library/aa468547.aspx
                'http://msdn.microsoft.com/en-US/data/bb190600.aspx
                Dim xdoc As New DOMDocument60
                Dim s As String
                s = s & "<Doc a=""1"" b=""2"">"
                s = s & "<Doc1 aa=""1"" bb=""2"" cc=""3"" dd=""4""/>"
                s = s & "<Doc1 aa=""1"" bb=""2"" cc=""3"" dd=""4"" ee=""5""/>"
                s = s & "<Doc1 aa=""1"" bb=""2"" cc=""3"" dd=""4""/>"
                s = s & "<Doc1 aa=""1"" bb=""2"" cc=""3"" dd=""4"" ff=""6""/>"
                s = s & "<Doc1 aa=""1"" bb=""2"" cc=""3"" dd=""4"" gg=""7""/>"
                s = s & "</Doc>"
                xdoc.LoadXML (s)
                DisplayNodes2 xdoc
            End Sub

            Sub DisplayNodes2(xmlDoc As DOMDocument60)
                'http://social.msdn.microsoft.com/Forums/en-US/xmlandnetfx/thread/454fbc72-ab87-4479-b0bf-b7925834ac4e/
                Dim xelem As IXMLDOMElement
                Dim xa As IXMLDOMAttribute
                For Each xelem In xmlDoc.SelectNodes("//*")
                    Debug.Print xelem.nodeName
                    For Each xa In xelem.Attributes
                        Debug.Print xa.Name, xa.Value
                    Next xa
                Next xelem
            End Sub