我在ESB上有一个接收XML有效负载的代理,我需要将此有效负载发送到另一个只接受CSV文件的软件。
所以我需要将这个XML有效负载转换为CSV文件,但是使用Smooks。我知道如何将CSV转换为XML,但相反我在网上找不到任何东西。当我尝试在Developer Studio上创建它时,CSV输出文件没有选项。
我知道如何使用XSLT转换将XML转换为CSV,但我的容量很大,我认为Smooks在这种情况下比XSLT更好。
答案 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']}