Java LanguageJAXP APIを使用したXML解析


備考

XML構文解析は、XML文書を、「ノード」、「属性」、「文書」、「名前空間」、またはこれらの構文に関連するイベントのような分かりやすい構文を使用して操作するためのものです。

Javaには、 JAXPと呼ばれるXML文書処理用のネイティブAPI 、またはXML処理用のJava APIがあります 。 JAXPとリファレンス実装は、Java 1.4(JAXP v1.1)以降のすべてのJavaリリースにバンドルされて以来進化を遂げています。 Java 8には、JAXPバージョン1.6が付属しています。

APIは、XML文書と相互作用するさまざまな方法を提供します。

  • DOMインタフェース(Document Object Model)は、
  • SAXインターフェース(Simple API for XML)
  • StAXインターフェイス(XML用ストリーミングAPI)

DOMインタフェースの原則

DOMインタフェースは、XMLを解釈するW3C DOM準拠の方法を提供することを目的としています。 JAXPのさまざまなバージョンでは、さまざまなDOMレベルの仕様(レベル3まで)がサポートされています。

ドキュメントオブジェクトモデルインタフェースの下では、XMLドキュメントはツリーとして表され、「ドキュメント要素」から始まります。 APIの基本型があるNodeタイプ、それから移動することを可能にするNodeではないすべて、が(親、子、または兄弟をNode Sは子供を持つことができ、例えば、 Textノードは、ツリー中の最終であり、子供を持つことはない)。 XMLタグはElementとして表され、特に属性関連のメソッドでNodeを拡張します。

DOMインタフェースは、XMLドキュメントをツリーとして「1行」解析し、構築されたツリー(ノードの追加、抑制、コピーなど)の簡単な変更を可能にし、最後にそのシリアル化(ディスクに戻す)後の変更。しかし、これは価格がかかります:ツリーはメモリに常駐しているため、DOMツリーは膨大なXML文書には必ずしも実用的ではありません。さらに、ツリーの構築は、特にXML文書のすべての部分に興味がない場合に、XMLコンテンツを処理する最速の方法であるとは限りません。

SAXインタフェースの原則

SAX APIは、XMLドキュメントを処理するイベント指向のAPIです。このモデルでは、XMLドキュメントのコンポーネントはイベントとして解釈されます(たとえば、「タグが開かれた」、「タグが閉じられた」、「テキストノードに遭遇しました」、「コメントが発生しました」など)。 ..

SAX APIは、「プッシュ・パース」アプローチを使用します。このアプローチでは、SAX ParserがXMLドキュメントの解釈を担当し、デリゲート( ContentHandler )のメソッドを呼び出してXMLドキュメント内のイベントを処理します。通常、パーサを書くことはありませんが、XMLドキュメントから必要な情報をすべて収集するハンドラが用意されています。

SAXインターフェイスは、パーサーレベル(たとえば、名前空間のコンテキスト、検証状態)で必要最小限のデータのみを保持することによってDOMインターフェイスの制限を克服します。したがって、開発者が責任を負うContentHandlerによって保持される情報のみメモリに保持される。このようなアプローチでは、「時間を遡って/ XML文書に戻る」方法がないというトレードオフがあります。DOMではNodeが親に戻ることができますが、SAXにはそのような可能性はありません。

StAXインターフェイスの原則

StAX APIは、SAX API(つまりイベント駆動型)と同様にXML処理に似たアプローチを採用していますが、StAXはプル・パーサー(SAXはプッシュ・パーサー)です。 SAXでは、 Parserは制御され、 ContentHandlerコールバックを使用します。 Staxでは、パーサを呼び出し、次のXML "イベント"を取得するかどうかを制御します。

APIはXMLStreamReader (またはXMLEventReader )で始まりますこれは、開発者がイテレータースタイルの方法でnextEvent()ことができるゲートウェイです。

JAXP APIを使用したXML解析 関連する例