2011-06-25 19 views
3

StAXでファイルを解析するための2つの異なるコードがあります。 カーソルAPIを使用してイテレータAPIを使用して:迅速なグーグルでは解析する2つの方法があることを教えてくれました。 2つの違いと、どちらが開発者の観点から使いやすいかを教えてください。StAX Cursor APIとIterator APIの違いは何ですか?

答えて

7

あなたは、Java Webサービス開発パックのチュートリアルやJava EE 5 tutorial内のStAX APIのセクションで答えを見つけることが最も可能性が高いです。それらの両方が、私は以下の再生していたのと同じ情報が含まれています:

カーソルと イテレータAPIの間で選択する前にカーソルとイテレータのAPI

を比較し、あなたはそのことができますいくつかの 事を注意してください

  • オブジェクトのXMLEvent sから作成された:あなたは カーソルAPIで行うことができない イテレータAPIで行います配列、リスト、マップで を使用することができ、 が後続のイベントに移動した後でも、 のアプリケーションで をアプリケーションに渡すことができます。

  • あなたはどちらかを完全 既存の項目の 新しい情報項目や拡張でのXMLEventのサブタイプを作成しますが、追加 メソッドを持つことができます。

  • XMLイベントストリームからイベントを追加または削除する方法は、カーソルAPIを使用するよりもはるかに簡単な の方法で行うことができます。

    同様

、 あなたの選択を行う際に念頭に置いて、いくつかの一般的な 勧告を保つ:

  • あなたはJ2MEのように、特にメモリに制約の 環境のためにプログラミングされている場合、あなたは を小さくすることができます、より効率的なコード、 カーソルAPI。

  • パフォーマンスが最優先事項である場合 - 例えば、 低レベルのライブラリや インフラストラクチャを作成するとき - カーソルAPIは 、より効率的です。

  • XML処理パイプラインを作成する場合は、反復子 APIを使用します。

  • イベントストリームを変更する場合は、イテレーターAPIを使用します。

  • アプリケーションでイベントストリームのプラグ可能な処理 を処理できるようにするには、イテレータ APIを使用します。あなたはイテレータAPIを使用して、強い優先一つの方法または 他のを持っていない場合は、一般的に

  • は、それがより 、柔軟で拡張することにより 「未来プルーフ」アプリケーションであるため、 がお勧めです。カーソルは、それが解析されていた以前のノードを覚えておく必要はありませんようお勧めしますが、

イテレータAPIは、カーソルAPIよりも遅くなります。それはXML文書の順方向のみの解析を提供し、XMLEventオブジェクトの構築のオーバーヘッドはありません。明らかに、a benchmarkは、SAXがStAXと比較して大きな文書を解析する際に優れているかもしれないことを示しています。データセットのベンチマークの結果を再現できるかどうかを確認したい場合があります。

+0

Thanks Vineet、それはかなり有益でした。 – Anand

+0

大規模な文書の問題に関する更新。あなたが提示したリンクは、Structured-Document Processing Languagesに関する2011コースからのものでした。あなたのコメントは2011年のコメントだったのですが、今は2014年です。新しいベンチマークは行っていませんが、リンクのコース情報を注意深く見れば、パフォーマンスの問題の多くはDOCTYPEが中古。 3年前にこの問題がはっきりと理解されていたことを考えると、これまでに問題が修正されたようです。また、 StAX Cursor APIはそれまでのところ最高のパフォーマンスを発揮しました。さらに大きなファイルサイズでは非常にうまく機能していました。 –

-1

長いXMLファイルを解析していない場合は、JDOMを使用するだけでJDOMはメモリ内のXML全体を読み込み速度が遅くなりますが、使い方は非常に簡単です。

jdom

+0

@ oscarMk- JDOMは、上記と同じ理由で問題になりません。**サイズが200MB以上のファイルを使用しています** – Anand

関連する問題