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