Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在VBA中获取XML响应中的值

在VBA中获取XML响应中的值
EN

Stack Overflow用户
提问于 2013-12-19 20:50:29
回答 1查看 1.9K关注 0票数 2

我使用GET请求从web服务获取XML响应。我正在尝试解析响应并在VBA表单中显示响应的一部分。我认为我能很好地处理VBA组件,但是XML语法给我带来了很多问题。这是到目前为止我在VBA中的sub:

代码语言:javascript
运行
AI代码解释
复制
Sub GetCANSIM()
Dim XMLRequest As New XMLHTTP
Dim objXML As MSXML2.DOMDocument
Dim point As IXMLDOMNode
Dim value As Variant
Dim lngYear As Long

Set objXML = New MSXML2.DOMDocument

XMLRequest.Open "GET", "someURL", False
XMLRequest.send

While XMLRequest.Status <> 200
    DoEvents
Wend

If Not objXML.LoadXML(XMLRequest.responseText) Then
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

End Sub

我使用的是Microsoft XML V6.0参考资料。

XML响应相当大,但它的格式如下:

代码语言:javascript
运行
AI代码解释
复制
<DataSet>
<xs:schema id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="CANSIM">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:int" minOccurs="0"/>
<xs:element name="Date" type="xs:dateTime" minOccurs="0"/>
<xs:element name="Year" type="xs:int" minOccurs="0"/>
<xs:element name="Month" type="xs:int" minOccurs="0"/>
<xs:element name="BondYield_LongTerm_Gov" type="xs:double" minOccurs="0"/>
<xs:element name="BondYield_LongTerm_Prov" type="xs:double" minOccurs="0"/>
<xs:element name="BondYield_LongTerm_Corp" type="xs:double" minOccurs="0"/>
<xs:element name="B14070" type="xs:double" minOccurs="0"/>
<xs:element name="B14072" type="xs:double" minOccurs="0"/>
<xs:element name="B14081" type="xs:double" minOccurs="0"/>
<xs:element name="B14045" type="xs:double" minOccurs="0"/>
<xs:element name="Rolling12MonthAvg" type="xs:double" minOccurs="0"/>
<xs:element name="B14055" type="xs:double" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram>
<NewDataSet>
<CANSIM diffgr:id="CANSIM1" msdata:rowOrder="0">
<ID>462</ID>
<Date>2006-06-01T00:00:00-04:00</Date>
<Year>2006</Year>
<Month>6</Month>
<BondYield_LongTerm_Gov>0.0469</BondYield_LongTerm_Gov>
<BondYield_LongTerm_Prov>0.0518</BondYield_LongTerm_Prov>
<BondYield_LongTerm_Corp>0.0581</BondYield_LongTerm_Corp>
<B14070>0.0458</B14070>
<B14072>0.0467</B14072>
<B14081>0.019</B14081>
<B14045>0.0318</B14045>
<Rolling12MonthAvg>0.026425</Rolling12MonthAvg>
<B14055>0.0328</B14055>
</CANSIM>
<CANSIM diffgr:id="CANSIM2" msdata:rowOrder="1">
<ID>463</ID><Date>2006-07-01T00:00:00-04:00</Date><Year>2006</Year><Month>7</Month>
<BondYield_LongTerm_Gov>0.0446</BondYield_LongTerm_Gov>  
<BondYield_LongTerm_Prov>0.0496</BondYield_LongTerm_Prov>
<BondYield_LongTerm_Corp>0.056</BondYield_LongTerm_Corp>
<B14070>0.0431</B14070>
<B14072>0.0445</B14072>
<B14081>0.018</B14081>
<B14045>0.0318</B14045>
<Rolling12MonthAvg>0.027216666667</Rolling12MonthAvg>
<B14055>0.0328</B14055>
</CANSIM>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

我想获取最近60个月的"B14045“利率和过去5年中第12个月的"Rolling12MonthAvg”。

这些值都是有序的,所以我想我应该能够通过使用" month“和"Year”属性“找到”或“转到”起始月份(60个月前),然后在递增循环中读取B14045率。

但是我不知道查找节点的语法(?)我想,然后递增前进。我试着阅读了一些帮助文件和其他主题,但我似乎搞不懂。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-12-20 17:37:05

我想我已经通过使用:http://www.w3schools.com/xpath/xpath_examples.asp弄清楚了XML语法

代码语言:javascript
运行
AI代码解释
复制
Sub GetCANSIM()
Dim XMLRequest As New XMLHTTP
Dim objXML As MSXML2.DOMDocument
Dim objNodeList As IXMLDOMNodeList
Dim objNode As IXMLDOMNode
Dim objElement As IXMLDOMElement
Dim strPath As String
Dim lngYear As Long

Set objXML = New MSXML2.DOMDocument

XMLRequest.Open "GET", "someURL",False
XMLRequest.send

While XMLRequest.Status <> 200
    DoEvents
Wend

If Not objXML.LoadXML(XMLRequest.responseText) Then
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

objXML.setProperty "SelectionLanguage", "XPath"

lngYear = year(Now()) - 8

'Select all the B14045 elements of the CANSIM elements which are within 5 years
strPath = "//CANSIM[Year>" & lngYear & "]/B14045"

Set objNodeList = objXML.DocumentElement.SelectNodes(strPath)

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20691422

复制
相关文章
Jenkins集成jira
JIRA Trigger Plugin JiraTestResultReporter plugin Jira Issue Updater JIRA Pipeline Steps
陈不成i
2021/06/03
1.2K0
Jira插件安装
一、Jira插件列表(可以将下面免费插件直接下载,然后登陆jira,在"插件管理"->"上传插件",将下载后的免费插件直接进行上传安装即可) 序号 插件名称 功能概要 供应商 资源 100用户报价($) 1 GreenHopper 敏捷项目管理 Atlassian 下载 2000 2 Universal Plugin Manager 管理插件的查找、安装、升级、授权等,也可用于Confluence,FishEye,Bamboo,Crucible 及S
洗尽了浮华
2018/04/18
9.1K0
Jira插件安装
7.Jenkins插件安装使用帮助说明
项目描述: Jenkins流水线步骤,提供SSH工具,如命令执行或文件传输,以实现持续交付。 项目地址: https://github.com/jenkinsci/ssh-steps-plugin
全栈工程师修炼指南
2022/09/29
2.1K0
7.Jenkins插件安装使用帮助说明
Jenkins 常用插件介绍
刚开始接触Jenkins,大部分都会从插件开始吧。我也是一样。被各种插件弄的懵逼。
zinyan.com
2022/12/07
11.9K0
Jenkins 常用插件介绍
jenkins通过fir插件实现ipa的自动发包
上一篇文章讲了通过蒲公英发包 jenkins+Xcode+蒲公英实现ipa自动打包发布全攻略 http://www.jianshu.com/p/ed124917d6c6#
专注APP开发
2019/11/07
1.1K0
jenkins通过fir插件实现ipa的自动发包
jira webhook发消息_jenkins webhook
为了能够接收webhook事件,你的插件需要在它的JSON装饰器中包含webhook模块的声明。这个声明包含了插件用于接收webhook事件的相对网址。换句话说,应用会发送一个HTTP POST给该资源来作为对应用事件的响应。处理POST的插件代码应该处理该消息中主体部分的几乎仍一个信息。每个发送给插件的webhook的POST也将会包含授权报头来允许插件来对请求消息进行验证。尤其是,JWT token能够被发现在HTTP报头的“Authentication”中。
全栈程序员站长
2022/11/17
2.5K0
CI/CD 工具选型:Jenkins 还是 Bamboo?
持续集成和持续交付是在软件开发生命周期中获得交付一致性的方法。作为一个流程,它帮助你自动化开发管道,同时确保所有事情都可跟踪。其中有趣的部分是在开发阶段中引入自动化。当我们谈到集成和交付时,另一个与之匹配的过程是“持续测试”,或者有时我们称之为 DevOps 测试。虽然持续集成(CI)和持续交付(CD)已经成为 DevOps 的重要组成部分,但在选择最佳工具时,DevOps 团队常常会陷入困境。如果没有 CI/CD 工具是无法想象的。
深度学习与Python
2020/11/16
6.1K1
CI/CD 工具选型:Jenkins 还是 Bamboo?
Go 1.19 发行说明(翻译)
美国时间 2022 年 8 月 2 日,Go 团队官宣 Go 1.19 正式发布。下面让我们一起了解下 Go 1.19 为我们带来的新特性吧。
恋喵大鲤鱼
2022/09/27
1.2K0
Go 1.18 发行说明(翻译)
美国时间 2022 年 3 月 15 日,Go 团队官宣 Go 1.18 正式发布。下面让我们一起了解下 Go 1.18 为我们带来的新特性吧。
恋喵大鲤鱼
2022/09/27
1.8K0
Go 1.18 发行说明(翻译)
Go 1.20 发行说明(翻译)
美国时间 2023 年 2 月 1 日,Go 团队官宣 Go 1.20 正式发布。下面让我们一起了解下 Go 1.20 为我们带来的新特性吧。
恋喵大鲤鱼
2023/10/12
7290
jenkins安装说明
centos6.x和centos7.x的yum和war安装方法相同,但是添加yum源的时候需要注意是不同的
dogfei
2020/07/31
3590
Laravel 7发行说明
Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。
Lansonli
2021/10/09
9.3K0
JavaFX 11发行说明
以下记录描述了有关此版本的重要更改和信息。在某些情况下,该说明提供了有关问题或更改的其他详细信息的链接。
gemron的空间
2019/11/04
6.9K0
Jenkins 插件
jenkins 的所有插件安装后需要重启才能够生效,由于jendkins国外官方插件地址的下载速度简直龟速,所以我们修改为国内插件地址(清华大学源):
木字楠
2022/11/15
7200
Jenkins 插件
Flink 作业生成①:生成 StreamGraph
如上,通过 DataStreamSource<OUT> StreamExecutionEnvironment#addSource(SourceFunction<OUT> function) 设置 SourceFunction 并返回一个 DataStreamSource。关于 SourceFunction、SourceContext 等请查看
codingforfun
2021/05/17
9370
Flink 作业生成①:生成 StreamGraph
Visual Studio 2017 15.8 版发行说明
显著提升了在运行包含多个测试项目的大型解决方案期间的性能。 在我们的实验室中,超过 10,000 个 MSTest 的解决方案执行单个测试的速度提高了 82%!
Edi Wang
2019/07/08
8.6K0
Visual Studio 2017 15.8 版发行说明
Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)
托管插件包括一系列流程步骤。 笔者完成了它所有步骤(包括非必须的步骤),其中主要有两个具有标志性的任务:
LinuxSuRen
2019/05/15
1.2K0
Jenkins插件维护
除了在线安装,还可以官网插件下载地址中进行下载安装,如果访问缓慢可以用清华镜像站。
陈不成i
2021/06/01
7010
Jenkins 常用插件
利用Docker容器动态创建Jenkins Slave。如果有了Kubernetes/Openshift集群,就不需要这个插件了。直接使用下面的Kubernetes插件。 jenkins非root启动的话,为了运行docker需要执行sudo chmod 777 /var/run/docker.sock
acc8226
2022/05/17
5730
Jenkins 邮件插件
1、下载插件 2、配置插件 3、插件设置 4.设置触发器: image.png
用户5760343
2022/05/24
3800
Jenkins 邮件插件

相似问题

如何以编程方式从jira插件中获取发行说明

25

作业生成器jenkins插件

13

Jenkins - JIRA插件问题

11

Jenkins JIRA插件问题

11

如何生成发行说明?

96
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档