2

非常に大きな xml ファイル (3GB 以上) を処理するアプリケーションがあります。分割にはトークナイザーを使用します。受信した xml には、異なる名前空間プレフィックスがあるか、プレフィックスがまったく使用されていません。トークナイザーがこれを処理することは可能ですか? 私が見つけた唯一のことは、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>
4

1 に答える 1

2

http://camel.apache.org/splitter.htmlに記載されているオプションinheritNamespaceTagNameを参照してください。したがって、あなたの場合は次のようになります。

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

それを試してみてください。

Camelで大きなXMLファイルを分割する方法についてのいくつかのブログ投稿へのリンクを見つけることができます。リンクは次のページにあります:http://camel.apache.org/articles。2つ目は、JAXB注釈付きpojoを使用してデータをモデル化する別のアプローチであるラクダスタックスに関するものです。

また、camel-vtdxmlコンポーネントにも取り組んでいます。また、vtd-xmlライブラリを使用して大きなXMLファイルを分割することもできます。詳細については、http://camel.apache.org/vtd-xmlを参照してください。

于 2012-09-11T12:34:54.887 に答える