Kettle 使用备忘录:生成xml文件

1. 利用 excel中的数据生成xml文件

kettle中的xml文件输出组件的功能其实是很弱的,所以要生成较为复杂的xml文件时需要使用组件:

add xml ,  xml join,  placeholder, js script 等等


使用merge join主要是为了减少在xml join中需要匹配的结果集合(因为xml join中的匹配功能其实是很弱的)。
在merge join之前记录必须先排序。
placeholder 组件是往记录流中添加一个常量,这个常量在 add xml中通常不被设为属性,而是在xml join中用于放置需要被组装进去的xml元素。
以生成如下简单的xml文件为例:
<?xml version="1.0" encoding="UTF-8"?>
<document>
    <section name="foo">
    <p>
        Hello from section foo
    </p>
    </section>
    <section name="bar">
    <p>
        Hello from section bar
    </p>
    </section>
</document>
对应的kettle 转换为:



首先需要从excel文件中读取数据,excel文件中的内容为




利用读取到的内容生成xml元素,如下是add xml中的设置:




这一步主要生成了如下的xml元素:
<section name="foo">
    <p>
        Hello from section foo
    </p>
</section>
<section name="bar">
    <p>
        Hello from section bar
    </p>
  </section>
接下来要生成 <document>元素,因为该元素没有对应的数据,所以使用“生成记录”组件生成一条空记录用于与之前的xml元素进行xml join。它的功能有点类似与之前提到的placeholder,不同的是这个可以作为起始输入,而placeholder是一个转换步骤。


接着就是进行xml join了,source stream中的xml元素会被拼接到target stream的xml元素中。怎么拼接有join condition properties决定,它是使用xpath来定位要拼接的位置,例如//doc 就是把source stream的元素拼接到每个doc元素中。需要注意的是,由于这次xml join之后xml文件就生成好了,所以不能把omit xml header选上。



当然通过xpath也可以做复杂的条件join,如下是个例子:


可以通过xpath指定在所有target stream的area元素中如果area的属性STATIONID的值与source stream中STATIONID的值(这个值不一定要在source的xml元素中,但必须在source stream中,例如可以是一开始从excel读入的流中)相同,那么把source stream中的xml元素放到 orderlinecomments元素中。

这步之后生成的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<document>
 <doc>
    <section name="foo">
    <p>
        Hello from section foo
    </p>
    </section>
    <section name="bar">
    <p>
        Hello from section bar
    </p>
    </section>
 </doc>
</document>
和我们预期的多了<doc>和</doc>,这是我们使用js脚本进行替换:




js脚本处理好之后,输出流的名字就换成 xmlOderLinesNew了。
最后把这个流输出到文件中,需要注意的是在内容中不要使用“分割符”,“封闭符”,和“头部”:






  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值