是否可以识别Tokenizer名称空间(使用Splitter时)

时间:2012-09-11 07:12:19

标签: xml apache-camel xml-namespaces

我们有一个应用程序,我们正在处理非常大的xml文件(3GB +)。对于拆分,我们使用Tokenizer。我们收到的xml有不同的名称空间前缀或根本不使用前缀。 Tokenizer可以处理这个问题吗? 我发现唯一的东西是使用inheritNamespaceTagName属性继承默认命名空间,但不幸的是,当使用名称空间前缀时它不起作用。

感谢您的帮助!

样本1:

<foo:orders xmnls:foo="http://foo.com">
  <foo:order id="1">Camel in Action</order>
  <foo:order id="1">ActiveMQ in Action</order>
  <foo:order id="1">DSL in Action</order>
</foo:orders>

样本2:

<bar:orders xmnls:foo="http://foo.com">
  <bar:order id="1">Camel in Action</order>
  <bar:order id="1">ActiveMQ in Action</order>
  <bar:order id="1">DSL in Action</order>
</bar:orders>

我们的路线:

 <route id="orderProcessorRoute">
      <from uri="file:process-xml?delete=true"/>
      <split streaming="true">
          <tokenize token="order" xml="true"/>
          <to uri="bean:xmlParseBean"/>
          <to uri="vm:orderAggregator"/>
      </split>
     <to uri="file:backup"/>
 </route>

1 个答案:

答案 0 :(得分:1)

请参阅:http://camel.apache.org/splitter.html中记录的选项inheritNamespaceTagName。所以在你的情况下它应该是:

<tokenize token="order" inheritNamespaceTagName="orders" xml="true"/>

试一试。

您可以找到一些博客文章的链接,了解如何使用Camel分割大型XML文件。链接位于此页面:http://camel.apache.org/articles。第二个是关于camel-stax,这是一种使用JAXB注释的pojo来模拟数据的不同方法。

我们正在开发一个camel-vtdxml组件。它还可以使用vtd-xml库拆分大型XML文件。详见:http://camel.apache.org/vtd-xml