使用.split()。tokenizeXML()在camel中拆分xml文件?

时间:2015-04-25 10:33:21

标签: java xml split apache-camel dsl

如何使用.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> 

2 个答案:

答案 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=&#39;Created&#39;]").to("direct:created")
    .when().xpath("//DataFile[@attribute=&#39;Updated&#39;]").to("direct:updated")
    .otherwise().to("direct:deleted")