使用Excel VBA读取XML

时间:2016-05-31 10:10:58

标签: xml excel vba

我正在尝试使用VBA从本质上获取以下XML中的“Rate”值(这是一个缩短版本,实际有超过500种速率可供选择)。我正在努力实现它,而不必遍历每个节点,直到我找到正确的节点。

-<DC>
- <Overviews>
      - <OverviewCurve>
         <Identifier>zero_libor_usd</Identifier>
         - <Curve>
           - <YieldCurve>
               - <Node>
                   <Term>32</Term> 
                   <Rate>0.027613082673910938</Rate> 
                 </Node>
            </YieldCurve>
          </Curve>
       </OverviewCurve>
 </Overviews>
</DC>

我试图使用的代码是..

Set xmldoc = New MSXML2.DOMDocument60
xmldoc.async = False
xmldoc.Load (Range("Path").Value & Range("FileName").Value)
Set xmlNode2 =xmldoc.SelectSingleNode("/DC/Overviews/OverviewCurve/Identifier/Curve/YieldCurve/Node/Rate")

但是代码为xmlNode2返回“Nothing”。 xml文件本身实际上有5个其他“OverviewCurve”节点,所有节点都以相同的方式构建,具有50个“速率”节点(即50个“术语”节点)。我正试图从文件中获取每一个。我删除了其他一些“Overviews”节点的子节点,因为它们与我想要提取的内容无关。

1 个答案:

答案 0 :(得分:0)

如果有多个Rate个节点,则XPATH“/ DC /概述/ OverviewCurve / Identifier / Curve / YieldCurve / Node / Rate”将不是SingleNode。< / p>

实施例

 Dim xmlDoc As MSXML2.DOMDocument60
 Dim xmlNode As MSXML2.IXMLDOMNode
 Dim xmlNodeList As MSXML2.IXMLDOMNodeList

 Set xmlDoc = New MSXML2.DOMDocument60
 xmlDoc.async = False
 xmlDoc.Load "P:\test.xml"

 Set xmlNode = xmlDoc.SelectSingleNode("//Rate[1]") 'xmlNode is now the first Rate

 Set xmlNodeList = xmlDoc.SelectNodes("//Rate") 'xmlNodeList is now a list of all Rate nodes

语法为XPATH,请参阅https://en.wikipedia.org/wiki/XPath