使用VBA从XML标签获取数据

时间:2018-07-02 10:25:13

标签: xml vba

我具有以下格式的XML文件。

<?xml version="1.0" encoding="UTF-8"?>
    <root1>
    <root2>
    <value1 claimed="23"/>
    <value2 claimed="3343"/>
    <value3 claimed="5656"/>
    </root2>
    </root1>

我需要每个子标签中的数据。

像/ root1 / root2 / value1应该为“ 23” / root1 / root2 / value2为“ 3343”

到目前为止,我有以下代码,这些代码可从我提供的每个Xpath中获取数据。

    Sub testxml()

    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.setProperty "SelectionLanguage", "XPath"
    xmlDoc.async = False
'XML File 
    xmlDoc.Load (ThisWorkbook.Sheets(1).Range("A1").Value)
    'XPath stored here
    Set nodeXML = xmlDoc.getElementsByTagName(Range("A2").Value)
    Columns("B:B").Clear
    For i = 0 To nodeXML.Length - 1

        For Each chlnodes In nodeXML(i).ParentNode.ChildNodes
           'Debug.Print chlnodes

        Next chlnodes

        Range("B" & i + 1).Value = nodeXML(i).Text
    Next

    End Sub

此代码适用于以下XML结构

<?xml version="1.0" encoding="UTF-8"?>
<root1>
<root2>
<value1>23</value1>
<value2>3343</value2>
<value3>5656</value3>
</root2>
</root1>

任何人都可以为此更新我的VBA代码。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试将属性选择器附加到XPath查询中:

Sub testxml()
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.setProperty "SelectionLanguage", "XPath"
    xmlDoc.async = False
'XML File 
    xmlDoc.Load (ThisWorkbook.Sheets(1).Range("A1").Value)
    'XPath stored here
    Set nodeXML = xmlDoc.SelectNodes(Range("A2").Value & /@claimed)
    Columns("B:B").Clear
    For i = 0 To nodeXML.Length - 1
        Range("B" & i + 1).Value = nodeXML(i).NodeValue
    Next
End Sub

我还删除了一些冗余代码,并对它进行了一些修改。