我具有以下格式的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代码。
谢谢。
答案 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
我还删除了一些冗余代码,并对它进行了一些修改。