使用 .split().tokenizeXML() 在骆驼中拆分 xml 文件?
Split xml file in camel using the .split().tokenizeXML()?
如何使用 .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>
和direct:deleted应该拆分并只使用这个。
<DataFile xmlns="Deleted">
</DataFile>
您不能使用 tokenizeXml 按命名空间拆分。您需要自己拆分文件,或者编写一些可以按命名空间拆分的代码。
我不知道如何在 XPath 中获取 "xmlns" 属性的值,因为 "xmlns" 是一个 NameSpace 属性。如果您可以将该属性的名称更改为例如"attribute" 你可以这样使用:
首先将 xml 拆分为元素列表 "DataFile",然后使用 "attribute" 的值使用基于内容的路由("attribute" 因为我不知道如何在 XPath 中获取 "xmlns" 属性的值 - 你可以自己找到并尝试)
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")
如何使用 .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>
和direct:deleted应该拆分并只使用这个。
<DataFile xmlns="Deleted">
</DataFile>
您不能使用 tokenizeXml 按命名空间拆分。您需要自己拆分文件,或者编写一些可以按命名空间拆分的代码。
我不知道如何在 XPath 中获取 "xmlns" 属性的值,因为 "xmlns" 是一个 NameSpace 属性。如果您可以将该属性的名称更改为例如"attribute" 你可以这样使用:
首先将 xml 拆分为元素列表 "DataFile",然后使用 "attribute" 的值使用基于内容的路由("attribute" 因为我不知道如何在 XPath 中获取 "xmlns" 属性的值 - 你可以自己找到并尝试)
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")