ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13635|回复: 10

[原创] 【梧月原创】WEBSERVICE 与 FILTERXML 函数提取 XML 数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-7-25 13:39 | 显示全部楼层 |阅读模式
本帖最后由 梧月书声 于 2016-7-25 14:14 编辑

Office 2013版中,微软为Excel 增加了50个函数,不过由于大部分函数功能过于冷门,很少见到关于这些新增函数的讨论和用例。不过其中有两个函数还是比较引人注意的,就是WEBSERVICEFILTERXML。近年来随着云计算、云应用的兴起,需要与web服务进行数据交互的情境也越来越多,微软也与时俱进地为Excel增加了相应的功能。那么这两个函数是做什么用的呢?


首先WEBSERVICE函数的功能是通过向目标网址发送http请求获取网页或数据,也就是获取未经浏览器解析的网页源代码或数据文件,使得原来需要VBA代码才能实现的http抓取操作用函数也能实现。不过遗憾的是,由于该函数并没有提供更多可选参数,因此我们无法自定义发起请求的方式和文件头参数等等。


FILTERXML函数则是针对XML文件的数据解析函数,简单说就是将数据从XML文件中取出来。XMLExtensible Markup Language)是目前web数据交换中使用最广泛的数据载体格式之一(另一个是JSON),当我们试图从web获取数据时,所需的数据有很大概率使用的是这两种格式之一,而其余的情况则可能是数据直接存在于html页面中。编写严谨的html也可看作XML的变体。无论是XML还是严谨的html,都可以使用XPath(路径语言XML Path Language)便捷地提取数据。篇幅有限,XPath不展开讲解,如需了解可以看这个快速教程http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html FILTERXML吸引人之处便在于函数原生支持了XPath,让数据的提取变得方便直观。


在本例中,我们将用WEBSERVICE函数获取一份xml数据文件,并使用FILTERXML函数将其中的数据解析到工作表中。


首先,这是我们要获取的XML文件的基本结构(节选),完整文件所在的urlhttp://www.w3school.com.cn/example/xmle/cd_catalog.xml

  1. <CATALOG>
  2. <CD>
  3. <TITLE>Empire Burlesque</TITLE>
  4. <ARTIST>Bob Dylan</ARTIST>
  5. <COUNTRY>USA</COUNTRY>
  6. <COMPANY>Columbia</COMPANY>
  7. <PRICE>10.90</PRICE>
  8. <YEAR>1985</YEAR>
  9. </CD>
  10. <CD>
  11. <TITLE>Hide your heart</TITLE>
  12. <ARTIST>Bonnie Tyler</ARTIST>
  13. <COUNTRY>UK</COUNTRY>
  14. <COMPANY>CBS Records</COMPANY>
  15. <PRICE>9.90</PRICE>
  16. <YEAR>1988</YEAR>
  17. </CD>
复制代码

如图,url地址在B1单元格,我们在B2单元格写入函数=WEBSERVICE(B1)

2&amp;3.png


回车之后,XML文件的内容便被获取并存入了B2单元格(确保你的设备能够联网,否则会返回错误值)


接下来,我们要将所需字段的数据解析到表格中。以下是数组公式的操作方法:选中B5:B29,在公式栏中输入公式=FILTERXML(B2,"//CD/TITLE") 然后别忘了ctrl + alt+ enter 我们就得到了所有Title字段的数据

4&amp;5.png

重复同样的操作获取其他字段,完成后效果如图所示

6.png


如果只需获取特定某个专辑的Title,则可使用公式=FILTERXML(B2,"//CD[3]/TITLE"),此处数字3代表xml中的第3CD节点下的Title字段。(如果此处有疑问请参看上文提到的xpath教程)


好了,到这里关于用WEBSERVICEFILTERXML函数获取和解析网络XML文件的例子就演示完了,希望对您有帮助!新人发帖,还望各位前辈不吝赐教!

本文为梧月原创,excelhome论坛首发
并采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载请以URL链接形式标注源地址。

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-25 18:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-26 10:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-1-26 11:56 | 显示全部楼层
wlxzwxfx 发表于 2017-1-26 10:03
如果网页需要输入验证怎么办啊

函数对比表示很无奈,即便是VBA也犯愁的~爬虫还是用python等程序语言

TA的精华主题

TA的得分主题

发表于 2017-1-26 13:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
写得很清楚,开拓了眼界,感谢分享

TA的精华主题

TA的得分主题

发表于 2017-12-16 18:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我用公式取:
=MID(WEBSERVICE(A1),FIND("title",WEBSERVICE(A1))+6,FIND("/title",WEBSERVICE(A1))-FIND("title",WEBSERVICE(A1))-7)
这个公式就能取出A1单元格网址对应的title.

TA的精华主题

TA的得分主题

发表于 2018-6-26 17:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-14 10:54 | 显示全部楼层
为啥我按了ctrl+alt+enter没反应啊。我只能得到第一个title

TA的精华主题

TA的得分主题

发表于 2018-9-22 16:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
billwei 发表于 2018-9-14 10:54
为啥我按了ctrl+alt+enter没反应啊。我只能得到第一个title

dtrl+shift+enter试试

TA的精华主题

TA的得分主题

发表于 2018-9-24 17:35 | 显示全部楼层
老师,如果网页 XML 的数据会变化,如何增量保存所有数据?

求助:http://club.excelhome.net/thread-1437420-1-1.html

.

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 14:41 , Processed in 0.049170 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表