でファイルを解析するための 2 つの異なるコードに出くわしましたStAX
。簡単にグーグルで調べたところ、解析にはカーソルAPIを使用する方法とイテレータAPIを使用する方法の2つがあることがわかりました。両者の違いと、開発者の観点から使いやすい方を教えてください。
2 に答える
答えは、Java Web Services Developer Pack チュートリアルまたはJava EE 5 チュートリアル内の StAX API セクションで見つかる可能性が最も高いでしょう。どちらにも、以下に再現している同じ情報が含まれています。
Cursor API と Iterator API の比較
カーソル API と反復子 API のどちらかを選択する前に、反復子 API では実行でき、カーソル API では実行できないいくつかの点に注意する必要があります。
XMLEvent サブクラスから作成されたオブジェクトは不変であり、配列、リスト、およびマップで使用でき、パーサーが後続のイベントに移動した後でもアプリケーションを介して渡すことができます。
XMLEvent のサブタイプを作成できます。これは、完全に新しい情報項目か、既存の項目の拡張ですが、メソッドが追加されています。
カーソル API を使用するよりもはるかに簡単な方法で、XML イベント ストリームからイベントを追加および削除できます。
同様に、選択する際には、いくつかの一般的な推奨事項を念頭に置いてください。
J2ME など、特にメモリに制約のある環境向けにプログラミングしている場合は、カーソル API を使用してより小さく効率的なコードを作成できます。
低レベルのライブラリやインフラストラクチャを作成する場合など、パフォーマンスが最優先される場合は、カーソル API の方が効率的です。
XML 処理パイプラインを作成する場合は、反復子 API を使用します。
イベント ストリームを変更する場合は、反復子 API を使用します。
アプリケーションでイベント ストリームのプラグ可能な処理を処理できるようにする場合は、反復子 API を使用します。
一般に、どちらか一方に強い好みがない場合は、反復子 API を使用することをお勧めします。反復子 API の方が柔軟性と拡張性に優れているため、アプリケーションの「将来性」が保証されます。
イテレータ API は推奨されますが、カーソル API よりも低速です。カーソルは、解析した前のノードを記憶する必要がないためです。XMLEvent
XML ドキュメントの前方のみの解析を提供し、オブジェクトの構築のオーバーヘッドがありません。どうやら、ベンチマークは、SAX が StAX に比べて大きなドキュメントの解析に優れている可能性があることを示しています。データセットのベンチマークの結果を再現できるかどうかを確認することをお勧めします。
長いXMLファイルを解析していない場合は、JDOMを使用するだけで済みます。JDOMはXML全体をメモリにロードし、速度が低下しますが、非常に使いやすいです。