2013-06-18 305 views
-1

如何在vba中从xml中获取所有属性名称,我试图在Excel中动态地收集属性名称而不是硬编码,属性名称可能增加或减少。VBA:从xml中获取属性名称

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

请给我一个方法。

+0

你有没有尝试过任何解决这个问题的方法,如果可以的话,请你发贴吗? – avalancha

+0

或[搜索](http://stackoverflow.com/search?q) – 2013-06-18 13:48:12

回答

0

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

我总是不得不去寻找网络来寻找这些问题的解决方案,通常这些帖子与我手边的XML工具版本不一致。通常,您可以使用IDE查看对象库,并找到在帖子中找到的相应属性和方法。在Excel中打开对象浏览器,您可以查看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