在WSO2 Integration Studio中用Smooks读取竖线分隔TXT文件或转CSV
问题解答
1. 直接用Smooks读取|分隔的TXT文件
完全可以,这类文件本质就是自定义分隔符的CSV格式,csv-reader组件不依赖文件扩展名,只需要正确配置分隔符即可。你当前的Smooks配置已经是正确的:
<?xml version="1.0" encoding="UTF-8"?> <localEntry key="Smooks-config-file" xmlns="http://ws.apache.org/ns/synapse"> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.5.xsd"> <csv:reader fields="SYS_CD,PRO_CD,LOC_CD,AVA_QTY,RESQTY,PRO_QTY" separator="|" skipLines="1"/> </smooks-resource-list> </localEntry>
separator="|"指定了分隔符为竖线,匹配你的文件格式skipLines="1"跳过表头行,正确解析数据行- Proxy中的Smooks调用配置也没问题,确保输入的TXT文本能正确传入即可。
2. 在WSO2 Integration Studio中转成CSV文件
如果确实需要将这类TXT转成标准逗号分隔的CSV文件,有两种简单方法:
方法一:利用Smooks+Payload Factory生成CSV内容
- 先用上述Smooks配置将TXT解析为XML
- 用Payload Factory Mediator将XML转换为逗号分隔的文本格式:
<payloadFactory media-type="text"> <format>$1,$2,$3,$4,$5,$6</format> <args> <arg evaluator="xml" expression="//SYS_CD"/> <arg evaluator="xml" expression="//PRO_CD"/> <arg evaluator="xml" expression="//LOC_CD"/> <arg evaluator="xml" expression="//AVA_QTY"/> <arg evaluator="xml" expression="//RESQTY"/> <arg evaluator="xml" expression="//PRO_QTY"/> </args> </payloadFactory>
- 再用File Mediator将生成的文本保存为
.csv扩展名的文件。
方法二:直接替换分隔符并重命名
如果不需要解析内容,只是简单替换分隔符和扩展名,可以用脚本Mediator(比如JavaScript)替换文本中的|为,, 再通过File Mediator指定输出文件名为.csv:
var payload = mc.getPayloadXML().toString(); var csvPayload = payload.replace(/\|/g, ","); mc.setPayloadXML(new XML(csvPayload));
内容的提问来源于stack exchange,提问作者Ruby
相关产品推荐
相关产品推荐

