问题陈述:我有如下XML文件:
<Orders>
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>2</EnterpriseCode>
</Order>
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
</Orders>
我想基于EnterpriseCode拆分数据。就像EnterpriseCode =“1”那么
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
以上结果推送到一个文件f1。
如果EnterpriseCode =“2”则
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>2</EnterpriseCode>
</Order>
推送到另一个文件f2
我希望Apache camel路由代码以XML格式解决此问题。 我尝试了以下内容:
<routes xmlns="http://camel.apache.org/schema/spring">
<route id="com.trainingaccount11.Route1" autoStartup="false">
<from uri="b2bmbFileSystem:com.trainingaccount11/second-input"/>
<convertBodyTo type="java.lang.String" charset="UTF-8"/>
<convertBodyTo type="org.w3c.dom.Document" charset="UTF-8"/>
<split>
<xpath>//Order/EnterpriseCode[text()='1']</xpath>
<setBody>
<xpath>//Order</xpath>
</setBody>
<log message="${body}"/>
<to uri="b2bmbFileSystem:com.trainingaccount11/logs5" />
</split>
</route>
</routes>
但我没有得到预期的结果。
我希望此代码中的输出如下:
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
<Order>
<OrderNo>1234</OrderNo>
<EnterpriseCode>1</EnterpriseCode>
</Order>
请建议我解决方案
答案 0 :(得分:0)
您获得了<EnterpriseCode>
元素,因为您的XPath //Order/EnterpriseCode[text()='1']
正在选择它。
如果您希望XPath返回Order
元素,它必须如下所示。请注意,基本xpath确定结果选择,而[...]
中的查询部分定义了与所选元素“更深”的条件。
<xpath>/Orders/Order[EnterpriseCode='1']</xpath>
但是,在您的示例中,此xpath生成两个结果“行”。因此,您可能会将它们作为来自拆分器的两条消息。因为在一条消息中,结果将是无效的XML(两个Order
元素将需要一个封闭的根元素。)