使用VBA选择单节点XML对象
嗨,我正在尝试访问下面的XML响应对象使用VBA选择单节点XML对象,xml,vba,excel,Xml,Vba,Excel,嗨,我正在尝试访问下面的XML响应对象 <?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> <
<?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>
这里是“现场”:
在StackOverflow中提供代码时,最好使用LateBinding,或者至少共享正在使用的库。该代码执行以下操作:
- 从PC加载XMLObject
xmlObj.Load(“C:\myaddress\test.xml”)
- 将地址
上的节点分配给变量gfi_message/body/data/node
nodesthattoment
- 开始循环使用此变量-在示例中只有一个节点
- 在该节点的
中,它在ChildNodes
属性中查找.XML
字符串“name=“Spot”
- 它会打印它找到的东西
只需使用
/gfi_message/body/data/node/field[@name='Spot']]
xpath,就可以找到特定的节点
注意-避免在XPath中使用/,因为它很慢
示例代码
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
输出
另一种方法如下。它将为您提供特定节点及其值
Sub DemoXML()
Dim post As Object
With CreateObject("MSXML2.DOMDocument")
.async = False: .validateOnParse = False
.Load (ThisWorkbook.Path & "\some_file.xml")
Set post = .SelectNodes("//node//field[@name='Spot']")(0)
MsgBox post.XML
MsgBox post.getAttribute("value")
End With
End Sub
输出:
<field name="Spot" value="7.81241/7.82871"/>
7.81241/7.82871
7.81241/7.82871
Sub DemoXML()
Dim post As Object
With CreateObject("MSXML2.DOMDocument")
.async = False: .validateOnParse = False
.Load (ThisWorkbook.Path & "\some_file.xml")
Set post = .SelectNodes("//node//field[@name='Spot']")(0)
MsgBox post.XML
MsgBox post.getAttribute("value")
End With
End Sub
<field name="Spot" value="7.81241/7.82871"/>
7.81241/7.82871