JavaStAXパーサー-概要

StAXは、SAXパーサーと同様の方法でXMLドキュメントを解析するJavaベースのAPIです。しかし、2つのAPIには2つの大きな違いがあります-

  • StAXはPULLAPIですが、SAXはPUSHAPIです。つまり、StAXパーサーの場合、クライアントアプリケーションはStAXパーサーに必要なときにXMLから情報を取得するように要求する必要があります。ただし、SAXパーサーの場合、SAXパーサーがクライアントアプリケーションに情報が利用可能であることを通知するときに、クライアントアプリケーションは情報を取得する必要があります。

  • StAX APIは、XMLドキュメントの読み取りと書き込みを行うことができます。SAX APIを使用すると、XMLファイルは読み取りのみが可能です。

環境設定

StAXパーサーを使用するには、アプリケーションのクラスパスにstax.jarが含まれている必要があります。

StAXAPIの機能は次のとおりです-

  • XMLドキュメントを上から下に読み取り、整形式のXMLドキュメントを構成するトークンを認識します。

  • トークンは、ドキュメントに表示されるのと同じ順序で処理されます。

  • パーサーが発生したトークンの性質をアプリケーションプログラムに報告します。

  • アプリケーションプログラムは、イテレータとして機能し、イベントを反復処理して必要な情報を取得する「イベント」リーダーを提供します。利用可能な別のリーダーは、XMLノードへのポインターとして機能する「カーソル」です。

  • イベントが識別されると、XML要素をイベントオブジェクトから取得して、さらに処理することができます。

いつ使用しますか?

−の場合はStAXパーサーを使用する必要があります

  • XMLドキュメントは上から下に直線的に処理できます。

  • ドキュメントは深くネストされていません。

  • DOMツリーが大量のメモリを消費する非常に大きなXMLドキュメントを処理しています。一般的なDOM実装では、10バイトのメモリを使用して1バイトのXMLを表します。

  • 解決すべき問題は、XMLドキュメントの一部のみに関係します。

  • データはパーサーに表示されるとすぐに利用できるため、StAXはストリームを介して到着するXMLドキュメントに適しています。

SAXのデメリット

  • XMLドキュメントは順方向のみで処理されるため、ランダムアクセスはありません。

  • パーサーが見たデータ、またはパーサーがアイテムの順序を変更した場所を追跡する必要がある場合は、コードを記述してデータを自分で保存する必要があります。

XMLEventReaderクラス

このクラスは、XMLドキュメントの解析中に発生したイベントを反復処理するために使用できるイベントの反復子を提供します。

  • StartElement asStartElement() −要素の値と属性を取得するために使用されます。

  • EndElement asEndElement() −要素の最後で呼び出されます。

  • Characters asCharacters() − CDATA、空白などの文字を取得するために使用できます。

XMLEventWriterクラス

このインターフェースは、イベントを作成するためのメソッドを指定します。

  • add(Event event) −要素を含むイベントをXMLに追加します。

XMLStreamReaderクラス

このクラスは、XMLドキュメントの解析中に発生したイベントを反復処理するために使用できるイベントの反復子を提供します。

  • int next() −次のイベントを取得するために使用されます。

  • boolean hasNext() −さらにイベントが存在するかどうかを確認するために使用されます。

  • String getText() −要素のテキストを取得するために使用されます。

  • String getLocalName() −要素の名前を取得するために使用されます。

XMLStreamWriterクラス

このインターフェースは、イベントを作成するためのメソッドを指定します。

  • writeStartElement(String localName) −指定された名前の開始要素を追加します。

  • writeEndElement(String localName) −指定された名前の終了要素を追加します。

  • writeAttribute(String localName, String value) −属性を要素に書き込みます。