我们有一个应用程序,我们正在处理非常大的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>
答案 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