Kettle使用_19 HTTP Client与XML JavaSript解析

                          Kettle使用_19 HTTP Client与XML JavaSript解析

需求:通过Kettle实现http://mirrors.163.com/centos/7/os/x86_64/repodata/repomd.xml的Web调用并将数字类型的timestamp解析为时间类型。

解决方法:通过Kettle的生成记录、HTTP Client、XML文件输入、选择改名值、JAVA Script组件来解决。其中HTTP Client负责接口的调用,XML文件输入负责解析XML,JAVA Script组件负责解析整型timestamp。

Step1:新建个转换

Step2: 拖个生成记录组件,(该组件位于转换输入分类下),配置如下:

 

Step3:拖个Http client,该组件位于转换的查询分类下。通过SHIFT与记录生成组件连接。

Step3:配置HTTP Client组件,配置URL字段名为repomd(对应生成记录里的字段),字段结果名为job-xml。

扫描二维码关注公众号,回复: 12408376 查看本文章

Step4:拖个xml数据输入组件,该组件位于转换的输入分类下,并通过SHIFT与HTTP Client组件连接。

 

Step5:配置xml数据输入组件见下:

配置XML解析源字段,这里是job-xml,需先勾选选项 XML源定义在一个字段里

 

配置循环读取路径,这里是/repomd/data

 

配置字段解析,这里可通过获取字段让kettle自动解析。

 

注:这里的data_type字段需要自己手动输入解析路径, @type,加下:

 

 

 

Step6:拖动个选择改名值(字段选择)组件,位于转换转换分类下。通过SHIFT与XML输入数据连接。并配置该组件。

 

 

Step7:拖动个Java Script组件,位于转换脚本分类下。通过SHIFT与字段选择组件连接。并配置该组件。

 

Java Script脚本:

//Script here
//var commonTime = new Date(repomdtime*1000).Format("yyyy-MM-dd hh:mm:ss");
function add0(m){return m<10?'0'+m:m }
var time = new Date(repomdtime*1000);
var y = time.getFullYear();
var m = time.getMonth()+1;
var d = time.getDate();
var h = time.getHours();
var mm = time.getMinutes();
var s = time.getSeconds();
var commonTime = y+'-'+add0(m)+'-'+add0(d)+' '+add0(h)+':'+add0(mm)+':'+add0(s);

 

Step8:保存并运行并验证该转换。

 

完整流程示意:

猜你喜欢

转载自blog.csdn.net/shenliang1985/article/details/113056788