使用VBA选择单个节点XML对象 [英] Select a single node XML object using VBA

查看:57
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆