如何在WSO2 ESB上使用Smooks将XML转换为CSV文件?

时间:2016-07-26 14:27:09

标签: wso2esb transformation esb smooks

我在ESB上有一个接收XML有效负载的代理,我需要将此有效负载发送到另一个只接受CSV文件的软件。

所以我需要将这个XML有效负载转换为CSV文件,但是使用Smooks。我知道如何将CSV转换为XML,但相反我在网上找不到任何东西。当我尝试在Developer Studio上创建它时,CSV输出文件没有选项。

我知道如何使用XSLT转换将XML转换为CSV,但我的容量很大,我认为Smooks在这种情况下比XSLT更好。

1 个答案:

答案 0 :(得分:0)

在Smooks 1.7中,您可以使用FreeMarker cartridge从XML转换为CSV:

<?xml version='1.0' encoding='UTF-8'?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
                      xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">

    <resource-config selector="record">
        <resource>org.milyn.delivery.DomModelCreator</resource>
    </resource-config>

    <ftl:freemarker applyOnElement="record">
        <ftl:template>account.ftl</ftl:template>
    </ftl:freemarker>

</smooks-resource-list>

FreeMarker访问者无法直接读取XML流,因此需要对DOM访问者进行配置,以便从输入流中找到的记录元素创建DOM。 account.ftl 模板可以如下:

<#ftl ns_prefixes={"ossandme":"http://ossandme.org"}>
${record['ossandme:First_Name']}~${record['ossandme:Last_Name']}~${record['ossandme:ShippingStreet']}~${record['ossandme:ShippingCity']}~${record['ossandme:ShippingState']}~${record['ossandme:ShippingPostalCode']}~${record['ossandme:Member_Tier__c']}

来源:https://oncodesign.io/2014/09/16/the-trials-of-smooks/