JavaでXMLメッセージをパースする方法
JavaはDOM、SAX、およびStAXの解析など、XMLメッセージを解析する方法をいくつか提供しています。
- DOMパーサ
DOMパーサーでは、XML文書全体をメモリにロードし、ツリー構造を構築することで、XML文書に対して追加、削除、変更、検索といった操作を容易に行うことができます。DOMパーサーを使用したXMLメッセージの処理手順は以下のとおりです。
- javax.xml.parsersパッケージにあるDocumentBuilderFactoryクラスを使用して、DocumentBuilderオブジェクトを作成する。
- DocumentBuilderオブジェクトのparse()メソッドを呼び出し、XMLメッセージの入力ストリームまたはファイルパスを渡して、XML文書全体を表すDocumentオブジェクトを取得する。
- DocumentオブジェクトのメソッドであるgetElementsByTagName()やgetElementsByTagname()などを利用してXML内のノードや属性情報などを取得します。
- SAX解析
SAXパーサはイベント駆動型の解析方法です。XMLドキュメント一行ずつ読み込み、特定のイベントが発生すると、関連するコールバック関数を呼び出して処理を行います。DOMパーサと比較して、SAXパーサはメモリ使用量がより効率的ですが、XMLドキュメントの追加、削除、変更には不便です。SAXを使用してXMLメッセージを解析する手順は次のとおりです。
- DefaultHandlerクラスを継承したカスタムハンドラクラスを作成し、startElement()、endElement()などのコールバックメソッドをオーバーライドします。
- SAXParserFactory クラスを javax.xml.parsers パッケージから利用して、SAXParser オブジェクトを作成します。
- SAXParserオブジェクトのparse()メソッドを呼び出し、XMLメッセージの入力ストリームまたはファイルパスを渡し、カスタム処理オブジェクトを渡してXMLメッセージの解析を開始します。
- StAXパーサ:
StAXはストリーミングパーサで、XML文書を解析する際に特定のノードを選択的に読み込んで処理することができ、DOMパーサのようにXML文書全体をメモリにロードする必要がなく、SAXパーサよりも使い勝手が良い。StAXによるXML文書の解析手順を以下に示す。
- XMLInputFactoryクラスのnewInstance()メソッドでXMLInputFactoryオブジェクトを作成
- XMLInputFactoryオブジェクトのcreateXMLStreamReader()メソッドを呼び出し、XMLメッセージの入力ストリームまたはファイルパスを渡してXMLStreamReaderオブジェクトを取得する。
- XMLStreamReaderオブジェクトのgetEventType()、getLocalName()などのメソッドを使用して、XML内のノードや属性情報を取得し、繰り返し処理することでXMLメッセージを読み込み、処理します。