使用VBA选择单个节点XML对象 [英] Select a single node XML object using VBA
本文介绍了使用VBA选择单个节点XML对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试访问下面的XML响应对象
Hi I'm trying to access the XML response object below
<?xml version='1.0' encoding='UTF-8'?>
<gfi_message version="1.0">
<header>
<transactionId>123</transactionId>
<timestamp>2018-02-08T15:59:41+08:00</timestamp>
<processingTime>0.15</processingTime>
</header>
<body>
<response name="action1" function="PRICING" version="1.0">
<option name="data" ref="price169" />
</response>
<data format="NAME_VALUE" name="price169">
<node name="European Call">
<field name="Scenario" value="Trading" />
<field name="Currency" value="USD" status="input" />
<field name="CtrCcy" value="HKD" status="input" />
<field name="Strategy" value="Call" status="input" />
<field name="Model" value="Analytic" />
<field name="Class" value="European" status="input" />
<field name="Direction" value="Buy" status="input" />
<field name="Spot" value="7.81241/7.82871" />
<field name="Cutoff" value="TOK" />
<field name="Market" value="OTC" />
<field name="HorDate" value="15:59 Thu 8 Feb 18" status="input" />
<field name="ValDate" value="12 Feb 18" />
<field name="SpotDate" value="12 Feb 18" />
<field name="Maturity" value="Odd Date" />
<field name="ExDate" value="8 Feb 18" status="input" />
<field name="ExDays" value="0" />
<field name="ExTime" value="14:00 SGT" />
<field name="DelDate" value="12 Feb 18" />
<field name="DelDays" value="0" />
<field name="PremDate" value="Mon 12 Feb 18" />
<field name="PremType" value="Spot" />
<field name="Strike" value="7.81241" />
<field name="CtrStk" value="0.128001474576987" />
<field name="FwdWealth" value="0\-0.002082079933987" status="input" />
</node>
</data>
</body>
</gfi_message>
具体地说,我只需要<字段名称="Spot" value ="7.81241/7.82871"/>
目前,我正在尝试解析并尝试在调试器中打印语句,但也没有得到任何响应
Currently I'm trying to parse and attempt to print the statements in a debugger but I'm not getting any response as well
Dim objXML As MSXML2.DOMDocument30
Dim nodesThatMatter As MSXML2.IXMLDOMElement
Set nodesThatMatter = objXML.SelectNodes("//gfi_message/body/data/node")
For Each Node In nodesThatMatter
Debug.Print nodesThatMatter.SelectSingleNode("field").Text
Next
推荐答案
您只需使用/gfi_message/body/data/node/field [@ name ='Spot']
xpath
You can find that particular node by simply using /gfi_message/body/data/node/field[@name='Spot']
xpath
注意-避免在xpath中使用//,因为它很慢.
Note - Avoid using // in xpaths as it is slow.
示例代码
Set objXML = CreateObject("MSXML2.DOMDocument.6.0")
With objXML
.SetProperty "SelectionLanguage", "XPath"
.ResolveExternals = True
.ValidateOnParse = True
.Async = False
.Load "C:\Users\pankaj.jaju\Desktop\test2.xml"
End With
Set objNode= objXML.SelectSingleNode("/gfi_message/body/data/node/field[@name='Spot']")
Msgbox objNode.XML
输出
这篇关于使用VBA选择单个节点XML对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文