created: 2021-02-22T09:19:41.000Z

XMLパーサーの Sax と Dom の一長一短について

XMLのパーサにはイベントドリブンの方式とオブジェクトベースの2つのやりかたがある

  • DOMはオブジェクトベース
  • SAXパーサはイベントドリブン

イベントドリブンにxmlをパースする場合は以下のようなイベントで処理をキックすることになる

  • タグの開始 < や終了 /> に当たった時
  • エレメントの内容/エンティティーを読み込んだ時
  • 構文解析などエラーが発生した時

パーサーは読み込みながらイベントにあたって登録された処理を実行していく

一長一短

DOMパーサ

DOMパーサのほうは、ツリーを生成するためXML文書をすべてメモリに置くことになるので、 文書が1GBとか大きい場合はメモリの使用量が大きくなってしまう。

htmlはメモリを圧迫するほど大きいことがあんまりないのでブラウザではDOMが使われている。

SAXパーサ

SAXパーサは読んでイベントを生成するだけなのでメモリに置くデータ量が小さくて済む。 しかし、SAXは逆にXMLを読み込んだ位置から前に戻るという操作が出来ない。 上から下に一方向に読んで、読み終わったら処理が終了しているという作りにする必要がある。

UIの操作に応じてXMLを変化させるといった操作に向かないためブラウザではSAXは使われていない。 SAXは巨大なXMLを上から下に読んでいくバッチ処理などで使い所がある。

参考

「シェル芸」に効く!AWK処方箋
[ad] 「シェル芸」に効く!AWK処方箋
斉藤博文 (Kindle版)