Streaming API for XML ( StAX ) は、 Java プログラミング言語コミュニティから生まれた、XMLドキュメントを読み書きするためのアプリケーション プログラミング インターフェイス ( API ) です。
従来、XML API は次のいずれかです。
- DOMベース - ドキュメント全体がツリー構造としてメモリに読み込まれ、呼び出しアプリケーションによってランダムアクセスされます。
- イベント ベース - アプリケーションは、ソース ドキュメント内でエンティティが検出されると、イベントを受信するように登録します。
どちらにも利点があります。たとえば、DOM ではドキュメントへのランダム アクセスが可能になり、 SAXなどのイベント駆動型アルゴリズムではメモリ フットプリントが小さく、通常は非常に高速になります。
これら 2 つのアクセス メタファーは正反対のものとして考えることができます。ツリー ベースの API では無制限のランダム アクセスと操作が可能ですが、イベント ベースの API ではソース ドキュメントを 1 回だけ通過します。
StAX は、これら 2 つの相反するものの中間として設計されました。StAX のメタファーでは、プログラム エントリ ポイントは、ドキュメント内のポイントを表すカーソルです。アプリケーションはカーソルを前方に移動し、必要に応じてパーサーから情報を「プル」します。これは、データをアプリケーションに「プッシュ」する SAX などのイベント ベースの API とは異なります。アプリケーションは、ドキュメント内の位置を追跡するために、必要に応じてイベント間の状態を維持する必要があります。
起源
StAX は、XML 用の互換性のないいくつかのプル API にルーツを持っています。最も有名なのは XMLPULL です。この API の作成者 (Stefan Haustein と Aleksander Slominski) は、BEA Systems、Oracle、Sun、James Clarkなどと共同作業を行いました。
例
JSR-173 仕様 • Final、V1.0 (公正使用に基づいて使用) より。
引用:
- 次の Java API は、カーソル アプローチで XML を読み取るための主なメソッドを示しています。
パブリックインターフェイスXMLStreamReader { public int next () throws XMLStreamException ; public boolean hasNext () throws XMLStreamException ; public String getText (); public String getLocalName (); public String getNamespaceURI (); // ...その他のメソッドは表示されません}
- API の書き込み側には、「StartElement」および「EndElement」イベント タイプの読み取り側に対応するメソッドがあります。
パブリックインターフェイスXMLStreamWriter { public void writeStartElement ( String localName ) throws XMLStreamException ; public void writeEndElement () throws XMLStreamException ; public void writeCharacters ( String text ) throws XMLStreamException ; // ...その他のメソッドは表示されていません}
- 5.3.1 XMLストリームリーダー
- この例では、入力ファクトリをインスタンス化し、リーダーを作成し、XML ドキュメントの要素を反復処理する方法を示します。
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance ( ) ; XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader ( ) ; while ( xmlStreamReader.hasNext ( ) ) { xmlStreamReader.next ( ) ; }
参照
Java で XML を処理するための競合する方法と補完的な方法 (順序は導入された日付に基づいています):
- ドキュメント オブジェクト モデル (DOM) は、言語やプラットフォームに依存しない最初の標準化されたツリーベースの XML 処理モデルです。代替の Java ツリー モデルには、JDOM、Dom4j、XOM などがあります。
- 標準のXMLプッシュAPIであるSimple API for XML (SAX)
- Java XML バインディング API (JAXB) は、別のパーサー (通常はストリーミング パーサー) 上で動作し、含まれるデータを Java オブジェクトにバインドします。
- ストリーミング XML
- Java 用 XQuery API
外部リンク
- StAX XML.com 入門、Harold、Elliotte Rusty
- XML 用 Java ストリーミング API (Stax) - チュートリアル
- XMLPull パターン Aleksander Slominski による XML Pull (および StAX) 設計パターンに関する記事。
- StAX パーサー - カーソルとイテレータ API HowToDoInJava によるカーソルとイテレータ API に関する記事。
