10

入力ファイルには、サイズが約 10 GB の XML 形式の数千のトランザクションが含まれています。要件は、ユーザー入力に基づいて各トランザクション XML を選択し、処理システムに送信することです。

ファイルのサンプルコンテンツ

<transactions>
    <txn id="1">
      <name> product 1</name>
      <price>29.99</price>
    </txn>

    <txn id="2">
      <name> product 2</name>
      <price>59.59</price>
    </txn>
</transactions>

(技術) ユーザーは、入力タグ名を のように指定する必要があります<txn>

このソリューションをより汎用的に提供したいと考えています。ファイルの内容は異なる場合があり、ユーザーは " //transactions/txn" のような XPath 式を指定して個々のトランザクションを選択できます。

ここで考慮しなければならない技術的な事柄はほとんどありません

  • ファイルは共有の場所または FTP にあります。
  • ファイルサイズが大きいため、ファイル全体を JVM にロードすることはできません

このシナリオで StAX パーサーを使用できますか? XPath 式を入力として受け取り、トランザクション XML を選択する必要があります。

提案を探しています。前もって感謝します。

4

7 に答える 7

13

Staxとxpathは非常に異なるものです。Staxを使用すると、ストリーミングXMLドキュメントを順方向にのみ解析できます。Xpathを使用すると、両方向の解析が可能になります。Staxは非常に高速なストリーミングXMLパーサーですが、xpathが必要な場合は、javaにそのための別個のライブラリがあります。

非常によく似た議論については、この質問を見てください。SAXモデル用のXPathプロセッサはありますか?

于 2011-08-27T17:02:45.750 に答える
2

あなたが説明したことを正確に行うSAXパーサーを使用して、1GB以上の複雑なXMLファイルを定期的に解析します。XPATHを使用して簡単にクエリできる部分DOMツリーを抽出します。

ここでブログを書きました- StAX パーサーではなく SAX を使用していますが、一見の価値があるかもしれません。

于 2012-01-07T15:36:50.330 に答える
1

QuiXProc ( http://code.google.com/p/quixproc )のようなストリーミングと並列処理の実装を備えた XProc のユースケースであることは間違いありません。

この状況では、使用する必要があります

  <p:for-each>
    <p:iteration-source select="//transactions/txn"/>
    <!-- you processing on a small file -->
  </p:for-each>

XProc の 1 行で結果の各変換をラップすることもできます

  <p:wrap-sequence wrapper="transactions"/>

お役に立てれば

于 2011-09-03T07:04:51.960 に答える
0

XML (STX) のストリーミング変換が必要な場合があります。

于 2011-08-27T17:21:02.603 に答える
0

高速に処理する必要がありますか、それともデータの高速検索が必要ですか? これらの要件には、異なるアプローチが必要です。

データ全体をすばやく読み取るには、StAX で問題ありません。

いくつかのデータベースにロードする必要があるよりも高速な検索が必要な場合は、Berkeley DB XML など

于 2011-08-27T19:28:35.193 に答える