我正在尝试使用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”节点的子节点,因为它们与我想要提取的内容无关。
答案 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。