13

私はネットサーフィンをしています。XMLStreamReaderは、 XML を解析するための Cursor スタイル API であることがわかりました。XMLEventReaderは、XML を解析するための Iterator スタイルの APIです。詳しく教えていただけますか?

4

3 に答える 3

14

説明をご覧ください: https://www.ibm.com/developerworks/library/x-stax1/

XMLStreamReader と XMLEventReader の両方を使用すると、アプリケーションは基になる XML ストリームを独自に反復処理できます。2 つのアプローチの違いは、解析された XML InfoSet の断片を公開する方法にあります。XMLStreamReader は、最近解析された XML トークンのすぐ先を指すカーソルとして機能し、それに関する詳細情報を取得するためのメソッドを提供します。このアプローチは、新しいオブジェクトを作成しないため、メモリ効率が非常に高くなります。ただし、XMLEventReader は実際には XML をイベント オブジェクトのストリームに変換する標準の Java イテレータであるため、ビジネス アプリケーションの開発者は XMLEventReader の方が少し直感的であると感じるかもしれません。各イベント オブジェクトは、それが表す特定の XML 構造に関する情報をカプセル化します。このシリーズのパート 2 では、イベント イテレータ ベースの API について詳しく説明します。どの API スタイルを使用するかは、状況によって異なります。イベント イテレータ ベースの API は、カーソル ベースの API よりもオブジェクト指向のアプローチを表しています。そのため、現在のパーサーの状態がイベント オブジェクトに反映されるため、モジュラー アーキテクチャに適用する方が簡単です。したがって、アプリケーション コンポーネントは、イベントの処理中にパーサー/リーダーにアクセスする必要はありません。さらに、XMLInputFactory の createXMLEventReader(XMLStreamReader) メソッドを使用して、XMLStreamReader から XMLEventReader を作成することができます。アプリケーション コンポーネントは、イベントの処理中にパーサー/リーダーにアクセスする必要はありません。さらに、XMLInputFactory の createXMLEventReader(XMLStreamReader) メソッドを使用して、XMLStreamReader から XMLEventReader を作成することができます。アプリケーション コンポーネントは、イベントの処理中にパーサー/リーダーにアクセスする必要はありません。さらに、XMLInputFactory の createXMLEventReader(XMLStreamReader) メソッドを使用して、XMLStreamReader から XMLEventReader を作成することができます。

于 2016-09-23T12:11:30.723 に答える
4

違いは、ストリーム リーダーが実際にイベントを表していることだと思います。

XMLEvent event = eventReader.nextEvent();    
if(event.getEventType() == XMLStreamConstants.START_ELEMENT){
    StartElement startElement = event.asStartElement();
    System.out.println(startElement.getName().getLocalPart());
}

streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT){
    System.out.println(streamReader.getLocalName());
}

そのため、イベント リーダー用に毎回追加のイベント オブジェクトが作成されます。非常に多くのイベントがあるため、オーバーヘッドが大きくなる可能性があります。

于 2019-04-15T04:35:55.527 に答える