Webservice接口数据抽取_kettel

在进行ETl数据抽取的时,有时会遇到Webservice接口服务的情况;这里对kettel工具和java脚本两种抽取方式来简单的介绍一下。

由于篇幅较长,我分四篇来介绍;下一篇地址:  (Webservice接口数据抽取_kettel<二>)

先看第一篇:


kettel工具方式:

一、Webservice服务查询。

这里利用常见的天气信息的接口来做演示。(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

    1、webservice接口的简单介绍:

a、调试接口,可以通过jemeter、soupUI等工具,也可以通过浏览器直接来调试。如下

访问接口的地址,可以看到网页上有5个关于该天气接口的方法:getSupportCity、getSupportDataSet、getSupportProvince、getWeatherbyCityName、getWeatherbyCityNamePro。下面来调试一下getWeatherbyCityName方法

结果:

这样我们就确定该服务是没有问题的,接下来我们就来演示抽取getWeatherbyCityName方法的返回数据。

b、用kettel调该接口,需要将接口转成URL的形式(加上?WSDL):

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL

同样我们也可以看到该接口的方法:


    2、kettel的web服务查询

kettel调用接口用的是‘web服务查询’查询这个组件。

a、web服务查询介绍

加载URL:输入地址,加载出方法名,说明接头是通的

输入参数:

输出参数:


    3、查询流程

a、生成变量:

c、文本文件输出:

d、结果查看


二、一些需要注意的地方

a、web服务查询时,有时候需要将放回的XML转成String。因为有时候kettel会自动的将XML的节点元素去掉,以后解析时就会出问题:


b、这个例子中,我将XML直接输出到txt文档的(在输入的时候就要选全部文档,不然看不见txt)。因为转成XML文件有时候会出现乱码现象。
c、生产记录时,要限制1次,不然会重复调接口,返回多个XML文件。
d、在文本文件输出时,要将头部去掉,并选择正确的编码格式,不然后面解析时会报错

前一篇介绍了Webservice接口的调用,现在介绍一下XML的解析

对XML的解析的主要点在于:Xpath。不管是kettel还是oracle函数,找对了节点的路径,基本上解析就成功了。

Xpath基本的介绍:http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html

一、Kettel解析

   a、XML文件输入

在上一遍中,我们调用接口生成了一个Txt文件,现在用kettel的“XML文件输入”工具对该文件进行解析,

但是这里的子节点全部都是<string>,利用kettel并不能很好的兼容,这个问题会在后面的java篇中介绍。这里先用一个比较标准的XML格式演示,如下:

添加文件:

获取XML文档节点路径:

获取输入字段:(这里将字段的类型设置为string,用自动获取的类型,在抽取的时候,可能会出现转换失败)

最后,可以预览一下数据:


对于这种基本格式的XML,只要kettel可以解析出XPath,基本数据就可以解析出来,然后直接存到数据库中。

对于其他格式,我们就需要自己去调整路径了,从下面两个地方去修改XML节点路径


例如DataSet格式的XML

DataSet包括两个部分,一个是说明部分,一个是数据部分(自己这么叫的,不专业);XML表示的一张或多张表。

天气接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getSupportDataSet

说明部分:


数据部分:

对于这种情况,先要找到数据部分的节点路径,在找到内个字段的路径。

1、节点路径:

字段路径:


路径对了,数据的处理就和前面是一样的。


二、Oracle解析

oracle功能十分的强大,可以自身去解析出很多种格式的XML文件,并且可以用工具清晰的看出来(例如PL/SQL);同时也可以利用oracle自带的函数来取出节点的数据。

a、oracle解析XML介绍

我首先将XML文件作为Clob字段存入数据库,然后通过PL/SQL查看:

oracle很完美的将XML解析出来。

甚至DataSet格式也是很轻而易举的解析:


b、oracle进行XML解析的函数:

主要有三个函数:


例如:

[sql]  view plain  copy
  1. select extract(xmltype(VAR1),'root/Data/PatientId')  from test  



对于kettel的接口抽取基本介绍这么多;从文中可以看出,kettel进行XML的解析限制很多,XML的格式一变化,就要花很多的精力去修改路径;同时对应XML的编码、版本、接口的实现方式等都有要求。所以接下来想对kettel进行二次开发利用,java进行XML解析,整合kettel,一起来解决webservice接口数据抽取的难题。




转载地址:https://blog.csdn.net/a275838263/article/details/51302541













最后:展示一下自己的配置:


这里限制要写1,不然会生成多个记录,字段就是借口所需要的参数以及内容


输入url后可以点击加载自动获取名字,但是request name 会自动添加request,需要删除




猜你喜欢

转载自blog.csdn.net/pengbin790000/article/details/80420565