涉足 WSO2 ESB 示例http://wso2.org/library/articles/2011/01/wso2-esb-example-file-processing但遇到一个问题,当一个简单的 csv 文件
name0,value0
name1,value1
name2,value2
name3,value3
由 smooks 使用此配置解析
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.1.xsd">
<csv:reader fields="name,value" />
</smooks-resource-list>
导致大部分正确的输出,但第一行包含不正确的有效负载命名空间
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<text xmlns="http://ws.apache.org/commons/ns/payload">name0,value0
name1,value1
name2,value2
name3,value3</text>
</soapenv:Body>
</soapenv:Envelope>
因此,当读取第一个 name0 值时,它包含的也是不正确的。
然后 Smooks 将其转换为
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<csv-set>
<csv-record number="1">
<name><?xml version='1.0' encoding='utf-8'?><text xmlns="http://ws.apache.org/commons/ns/payload">name0</name>
<value>value0</value>
</csv-record>
<csv-record number="2">
<name>name1</name>
<value>value1</value>
</csv-record>
<csv-record number="3">
<name>name2</name>
<value>value2</value>
</csv-record>
<csv-record number="4">
<name>name3</name>
<value>value3</text></value>
</csv-record>
</csv-set>
</soapenv:Body>
</soapenv:Envelope>
那么 Smooks 是否在做所有被问到的事情,因为输入包括最后一个?但是,它理解的元素数计为 4,因此 csv 似乎不应该有标题行。我可以通过包含标题行来解决(在一定程度上),但元素计数不正确。我可以通过在 csv 的最后一行包含一个回车来解决结束关闭的问题。
我该如何解决这个问题?一年前我发现另一个线程问同样的问题但没有答案。