3

多くの XML データを扱うアプリケーションがあります。そこで、Java で XML を処理するのに最適な API はどれかお聞きしたいと思います。現在、私は W3 を使用していますが、パフォーマンスのために、いくつかの API に移行したいと考えています。XML を 0 から作成し、多くの変換を行い、データベース ( mysqlmssqlなど) にインポートし、データベースから html にエクスポートし、それらの XML を変更します。

JDOM は最良の選択肢ですか? JDOMよりも優れたものを知っていますか? javolutionについて(ページを読んで)聞きました。誰か使って?

どの API をお勧めしますか?

4

3 に答える 3

2

大量のデータがある場合、主なことは、すべてのデータを一度にメモリにロードする必要がないようにすることです(大量のメモリを使用し、IOと処理の重複を防ぐため)。悲しいことに、ほとんどのDOMおよびDOMに似たライブラリ(DOM4Jなど)はまさにそれを実行していると思います。そのため、大量のXMLを効率的に処理するにはあまり適していません。

代わりに、SAXやStAXなどのストリーミングAPIの使用を検討してください。私の経験では、StAXの方が通常は使いやすいです。

SAXのパフォーマンスでDOMの利便性を提供しようとする他のAPIがあります。Javolutionは1つかもしれません。VTD-XMLは別のものです。しかし、正直なところ、StAXは非常に扱いやすいと思います。基本的には派手なストリームなので、ストリームからテキストファイルを読んでいるのと同じように考えます。

試すかもしれないことの1つは、JAXBとStAXを組み合わせることです。アイデアは、StAXを使用してファイルをストリーミングし、次にJAXBを使用してその中のチャンクをアンマーシャリングすることです。たとえば、Atomentryフィードを処理している場合は、それを開いてヘッダーを超えて読み取り、要素を一度に1つずつオブジェクトにアンマーシャリングするループで作業できます。これは、フォーマットがAtomのような独立した要素のシーケンスで構成されている場合にのみ実際に機能します。XHTMLのようなよりリッチなものではほとんど役に立たないでしょう。この例は、JAXBリファレンス実装男のブログ投稿で見ることができます。

于 2011-07-04T15:15:39.730 に答える
1

答えは、アプリケーションにとって重要なパフォーマンスの側面によって異なります。1 つの要因は、大きな XML ドキュメントを処理しているかどうかです。

解析に関しては、DOM ベースのアプローチは大きなドキュメントにうまく対応できません。大きなドキュメントを解析する必要がある場合は、SAX や StAX を使用するパーサーなどの非 DOM パーサーの方が高速で、リソースの消費も少なくなります。ただし、解析後に XSL または DOM API を使用して XML を変換する必要がある場合は、いずれにしてもメモリ内にドキュメント全体が必要になります。

コードから XML を作成するために、StAX には優れた API が用意されています。このアプローチはストリームベースであるため、これは非常に大きなドキュメントの作成に適しています。

于 2011-07-04T14:30:28.627 に答える
0

まあ、私が知っているほとんどの開発者と私はdom4Jを使用しています。時間があれば、両方のフレームワークを使用して小さなパフォーマンス テストを作成できます。そうすれば、違いがわかります。私はdom4jを好みます。

于 2011-07-04T14:20:05.210 に答える