在过去网页采集功能开发过程中,已经推出一组针对网页元素的提取函数,将网页采集常见的json文件和html文件进行指定元素内容的提取。可满足绝大部分场景使用。 在html文件提取中,其实用的是xml提取技术,使用xpath语法去提取指定内容(也扩展了能够使用CSS的selector方式来提取)。但html毕竟仅仅是xml文件子集,对真正的xml文件的提取,仍然缺少对带命名空间的xml文件提取未能囊括。 本篇再次进行更新,将其补全,在大众数据领域,没有Excel催化剂不可及的地方,欢迎大家更多参与,有好的数据需求,多多提出。
xml是一种伟大的数据格式标准,虽然现在网页开发中,已大量使用json作为数据交互媒介,但xml比json更为强大,覆盖的领域比json更广,也因为曾经流行过,仍然有大量历史工具、程序使用其进行数据交互特别是配置文件的数据存储。
如果未能按xml结构化的提取方式,从其中提取自己需要的数据,而简单粗爆地使用文本字符串处理技术例如正则表达式提取,实属一大遗憾,毕竟现成的结构化不使用,而使用更麻烦的字符提取,得不偿失,工作量俱增且提取准确性得不到保障。
本次触发此功能的实际场景是,需要对Excel的颜色主题文件进行颜色代码的提取,源于EasyShu社群里有位群友发起的讨论,觉得EasyShu的自带的经济学人的主题颜色红色值有偏差,和经济学人不符(经确认其实没有真正的对错,毕竟经济学人的配色是大家自行总结的,非官方公布的。可能不同人采集的样本有些不一,两种红色均有使用过)
最后笔者建议用户自行去修改EasyShu的颜色主题文件,即本篇的主角带命名空间的xml文件。
文件格式如下:
我们观察到每个节点前都有个a:这样的标识,如<a:srgbClr val="B9D1DD"/>
此时要提取到颜色属性值,写xpath时,就需要带上命名空间a(此处的a是命名空间的昵称缩写),如//a:srgbClr
社区里经常不时有人提问,有了PowerBI后,是否就可以不用学XXX之类的问题,诚然,PowerBI的PowerQuery组件确实强大,专业用于对数据进行ETL操作,但每个工具都有其适用的范围,有时也更是杀鸡不用牛刀,动不动把它拉出来,其实没必要,就如上述的提取颜色代码场景,非要用PowerQuery的读取xml文件功能,也是可行。
重点是:PowerQuery无论是xml还是json,都无法使用xpath或jsonPath这种语法去提取,只能自己一层层地展开,非常不灵活,就如处理字符串时没有正则表达式可用,只能用几个简单的字符函数一样难受。
下图中在PowerQuery上界面操作展开xml结构和对应的高级编辑器内容,非常繁琐,一个个节点去展开。
大好的消息是Excel催化剂大量的功能在PowerQuery之上更为好用易用,例如接下来介绍到的自定义函数提取带命名空间的xml文件。千万不要钻牛角尖以为Excel或官方的功能才值得学,而且苦苦地学下来,有大量场景其实性价比并不高。
接上述所说到的,本次的提取带命名空间的xml文件自定义函数,放到过往的网页采集函数组中,形成功能连贯性,虽然不完全针对网页采集使用。
老规矩,强烈建议从搜索功能入手去找到对应的函数。下图中关于网页采集的函数非常全面丰富
当然在Excel的函数向导里也可以看到相关的函数。
一个函数,轻松获取到最终的元素内容一次性返回,甚至可以提取文件的内容,不仅限于Excel单元格内的字符内容。
Excel催化剂的自定义函数与插件主体分离,可以只使用自定义函数,不安装Excel催化剂插件,反之如果安装了Excel催化剂,也不能立即有自定义函数功能,需要在【手动更新自定义函数】处进行下载,有新版本发布时,也需要手动点击【更新自定义函数】进行替换更新。
自定义函数的下载地址仍然提供给大家,方便某些电脑不能安装Excel催化剂插件的人使用,只需下载到自定义函数,根据自己Excel的位数不同选择32位xll还是64位xll,双击即可打开,绿色免安装。
如果想每次打开Excel都自动加载,可以将文件丢到插件文件夹路径下(C:\Users\Administrator\AppData\Roaming\Microsoft\AddIns\ 不同用户名将Administrator替换为自己用户名即可)。
让Excel加载时检测到或手动在加载项清单上进行【浏览】选择操作,选择电脑上存放的xll文件,特别是电脑上安装了64位Excel和32位WPS时,文件不放到插件文件夹内,WPS不自动加载就不会报错。