unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

JavaでXMLを扱う

JavaXMLを扱う方法(Java SE/EEに標準で組み込まれているもの)について簡単にまとめてみました。

DOM (Document Object Model)

  • http://www.w3.org/DOM/DOMTR
  • XMLをツリー構造として読み込んでから操作する。
  • W3CAPI仕様を策定しているため他の言語でも同じように実装ができる。

SAX (Simple API for XML)

  • http://www.saxproject.org
  • パーサーがXMLを先頭から読み込みながらイベント(要素の開始など)を発生させ、
  • アプリケーションは各イベントに対してハンドラを登録して処理を記述する。
  • 仕様策定は標準化団体ではなく有志によるが、DOMに並んで多くの言語でサポートされている。
  • DOMと比べて省メモリだが、ランダムアクセスが必要な処理には不利。

StAX (Streaming API for XML)

  • https://www.jcp.org/en/jsr/detail?id=173
  • パーサーがXMLを先頭から読み込みながらイベント(要素の開始など)を発生させ、
  • アプリケーションはイテレータI/Fのようにイベントをループ処理で取得し、イベントの種類の応じて処理を記述する。
  • 仕様はJSR173で策定されている。
  • SAXがプッシュ型と称されるのに対し、StAXはプル型とされる。

JAXB (Java Architecture for XML Binding)

  • https://jcp.org/en/jsr/detail?id=222
  • XMLJavaオブジェクトの相互変換するためのAPI仕様。
  • 仕様はJAXB 1.0がJSR31、JAXB 2.0がJSR 222として策定されている。
  • JAXPと異なりデータ変換に特化しているため学習コストが低い。