如何使用.split()。tokenizeXML()在camel中拆分xml文件?我附上了代码段。我不知道我错在哪里。 这是我的意见。
<Record>
<DataFile xmlns="Created">
</DataFile>
<DataFile xmlns="Updated">
</DataFile>
<DataFile xmlns="Deleted">
</DataFile>
</Record>
这是我的骆驼路线
// Main Route
from(...)
.routeId("processor route")
.process(...)
.to("direct:created",
"direct:updated",
"direct:deleted").end();
// Created
from("direct:created")
.routeId("created route")
.split().tokenizeXML("xmlns:Created", "Record")
.to(...).end();
// Updated
from("direct:updated")
.routeId("updated route")
.split().tokenizeXML("xmlns:Updated", "Record")
.to(...).end();
// Deleted
from("direct:deleted")
.routeId("deleted route")
.split().tokenizeXML("xmlns:Deleted", "Record")
.to(...).end();
我的预期输出是...... direct:created应该拆分并仅使用这个。
<DataFile xmlns="Created">
</DataFile>
direct:updated应该拆分并仅使用这个。
<DataFile xmlns="Updated">
</DataFile>
和直接:删除应该拆分并仅使用此。
<DataFile xmlns="Deleted">
</DataFile>
答案 0 :(得分:3)
您无法使用tokenizeXml按命名空间拆分。您需要自己拆分文件,或者编写一些可以按命名空间拆分的代码。
答案 1 :(得分:1)
我不知道如何获得&#34; xmlns&#34;属性在XPath中,因为&#34; xmlns&#34;是NameSpace属性。如果您可以将该属性的名称更改为例如&#34;属性&#34;你可以使用这样的东西:
首先将xml拆分为元素列表&#34; DataFile&#34;,然后使用&#34;属性&#34;的值使用基于内容的路由。 (&#34;属性&#34;因为我不知道如何在XPath中获得&#34; xmlns&#34;属性的价值 - 你可以自己找到并试试)
from("direct:route").split().tokenizeXML("DataFile").streaming().choice()
.when().xpath("//DataFile[@attribute='Created']").to("direct:created")
.when().xpath("//DataFile[@attribute='Updated']").to("direct:updated")
.otherwise().to("direct:deleted")