kettle生成xml文件

接了一个行内的项目,其中一个步骤是需要使用kettle生成xml文件。

这里我介绍了2种情况:

第一种情况的详细过程:

        本人使用的kettle版本为7.1。

        下图是要最终生成的测试案例模板

<?xml version="1.0" encoding="UTF-8"?>
<MSG>
    <APPTYPE>ACCC</APPTYPE>
    <CURRENTFILE>ACCA</CURRENTFILE>
    <INOUT>IN</INOUT>
    <TOTALRECORDS>1</TOTALRECORDS>
    <RECORDS>
        <ACTIONTYPE>A</ACTIONTYPE>
        <ACTIONDESC/>
        <RPTNO>123456</RPTNO>
        <CUSTYPE>C</CUSTYPE>
        <IDCODE>430515199710222331</IDCODE>
        <CUSTCOD>C212</CUSTCOD>
        <CUSTNM>张三A</CUSTNM>
        <OPPUSER>LISI</OPPUSER>
        <TXCCY>CNY</TXCCY>
        <TXAMT>200</TXAMT>
        <EXRATE> 00000.72000000</EXRATE>
        <LCYAMT>100</LCYAMT>
        <LCYACC>327342334237</LCYACC>
        <FCYAMT>600</FCYAMT>
        <FCYACC>USD2131</FCYACC>
        <OTHAMT/>
        <OTHACC/>
        <METHOD>D</METHOD>
        <BUSCODE>123123</BUSCODE>
        <INCHARGECCY>CNY</INCHARGECCY>
        <INCHARGEAMT>20</INCHARGEAMT>
        <OUTCHARGECCY/>
        <OUTCHARGEAMT/>
    </RECORDS>
</MSG>

这是kettle的转换整个过程图

首先把要生成的xml文件拆解,可以分为2部分,上面4个标签的值为固定值,下面标签的值是从数据库取的,所以我们先分别生成,然后再把结果通过XML JOIN组件连接起来再输出。

第一步:添加生成记录组件,并如图配置,根据需要自己增删字段,是否设置默认值

第二步:添加add XML组件,并如图配置,把数据转化为xml格式数据

这里的字段没有把RECORDS加进去,因为第四步的根元素添加了,所以第一步的这个字段可以省略

第三步:添加表输入组件,如图所示,获取表数据

第四步:添加add XML组件,并如图配置,把表数据转换为xml格式数据

第五步:添加XML Join组件,把转换过的2个xml数据连接起来;

这里我指定的连接条件是根元素'//MSG',也可以在第一步的时候多加个'RECORDS',这里的关联条件就可以用'//RECORDS'

第六步:添加文本文件输出组件,字段选择上一步骤的输出结果“VALUE3”,把结果输出为.xml文件

第七步:查看输出结果,正确

第二种情况的详细过程:

第二种情况是需要替换掉多的XML标签;多了个javascript代码组件,其它与第一种情况相同。

总的流程图如图所示:

我们需要的结果如图所示:

<MSG>
    <APPTYPE>BOP</APPTYPE>
    <CURRENTFILE>BOPT</CURRENTFILE>
    <INOUT>IN</INOUT>
    <TOTALFILES>10</TOTALFILES>
    <FILES>
        <FILENAME>BOPA11111111124072401</FILENAME>
        <FILENAME>BOPB11111111124072401</FILENAME>
        <FILENAME>BOPC11111111124072401</FILENAME>
        <FILENAME>BOPD11111111124072401</FILENAME>
        <FILENAME>BOPE11111111124072401</FILENAME>
        <FILENAME>BOPF11111111124072401</FILENAME>
        <FILENAME>JSHD11111111124072401</FILENAME>
        <FILENAME>JSHD11111111124072402</FILENAME>
        <FILENAME>JSHE11111111124072401</FILENAME>
        <FILENAME>JSHE11111111124072402</FILENAME>
    </FILES>
</MSG>

但是实际跑出来的数据如图所示:

<MSG>
    <APPTYPE>BOP</APPTYPE>
    <CURRENTFILE>BOPT</CURRENTFILE>
    <INOUT>IN</INOUT>
    <TOTALFILES>10</TOTALFILES>
    <FILES>
        <REC>
            <FILENAME>BOPA11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>BOPB11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>BOPC11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>BOPD11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>BOPE11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>BOPF11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>JSHD11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>JSHD11111111124072402</FILENAME>
        </REC>
        <REC>
            <FILENAME>JSHE11111111124072401</FILENAME>
        </REC>
        <REC>
            <FILENAME>JSHE11111111124072402</FILENAME>
        </REC>
    </FILES>
</MSG>

这时候我们需要使用JavaScript代码组件,把里面不需要的<REC></REC>标签去掉

如图所示

上图中的代码:

var VALUE4=VALUE3.replace(/<REC>|<\/REC>/g,"");

最后再说一下其它方式也能完成第二种效果,因为其实这些xml文件名除了时间外,其它的地方都是固定的,所以相当于我只要把时间用变量传入,其它的值都是不变的常量,所以对比第二种情况我们只要改下表输入和Add xml就行了

步骤ADD XML 2

生成的.xml文件详情:

<MSG>
    <APPTYPE>BOP</APPTYPE>
    <CURRENTFILE>BOPT</CURRENTFILE>
    <INOUT>IN</INOUT>
    <TOTALFILES>10</TOTALFILES>
    <FILES>
        <FILENAME>BOPA11111111124072401</FILENAME>
        <FILENAME>BOPB11111111124072401</FILENAME>
        <FILENAME>BOPC11111111124072401</FILENAME>
        <FILENAME>BOPD11111111124072401</FILENAME>
        <FILENAME>BOPE11111111124072401</FILENAME>
        <FILENAME>BOPF11111111124072401</FILENAME>
        <FILENAME>JSHD11111111124072401</FILENAME>
        <FILENAME>JSHD11111111124072402</FILENAME>
        <FILENAME>JSHE11111111124072401</FILENAME>
        <FILENAME>JSHE11111111124072402</FILENAME>
    </FILES>
</MSG>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值