我正在处理一个处理包含大量订单的xml文件的应用程序。为了管理订单量,我决定创建一个包含每1000个订单的文件。对于拆分文件,我使用了继承名称空间标签的重载方法TokenizeXML,但是此解决方案无法解决我的问题,因为TokenizeXML会在每个子订单上继承名称空间,而不是包装整个文件。我只是想知道是否存在不使用自定义聚合策略的解决方案。
示例:输入
<foo:namespace xmnls:foo="http://foo.com">
<MessageInfo>
<dateTime>20180127T0253-0500</dateTime>
<id>20180127T0253-0500</id>
</MessageInfo>
<orders>
<order>
<name>source1</name>
</order>
<order>
<name>source2</name>
</order>
<order>
<name>source3</name>
</order>
<order>
<name>source4</name>
</order>
</orders>
</foo:namespace>
创建2个订单2个文件的示例路由
from("{{input}}")
.split().tokenizeXML("order","*",2)
.process(setOutputName)
.to("{{JmsOutput}}");
结果:
文件1
<foo:namespace xmnls:foo="http://foo.com">
<MessageInfo>
<dateTime>20180127T0253-0500</dateTime>
<id>20180127T0253-0500</id>
</MessageInfo>
<orders>
<order>
<name>source1</name>
</order>
</orders>
</foo:namespace>
<foo:namespace xmnls:foo="http://foo.com">
<MessageInfo>
<dateTime>20180127T0253-0500</dateTime>
<id>20180127T0253-0500</id>
</MessageInfo>
<orders>
<order>
<name>source2</name>
</order>
</orders>
</foo:namespace>
期望:
File1
<foo:namespace xmnls:foo="http://foo.com">
<MessageInfo>
<dateTime>20180127T0253-0500</dateTime>
<id>20180127T0253-0500</id>
</MessageInfo>
<orders>
<order>
<name>source1</name>
</order>
<order>
<name>source2</name>
</order>
</orders>
</foo:namespace>