Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

DOMとSAXは違う。

DOMとSAXが違うということは、薄々感づいていたのですが、

意識することなくいろんなサイトのソースをコピペして、

スクレイピングしようとしていました。

 

ですが、やはりDOMとSAXの違いというのは、

小さくなさそうなのでちょっと調べてみました。

 

・技術者のためのXML再入門(10):XMLプログラミングのためのAPI - @IT

XMLデータを操作するAPIとして、現在下記の2つがデファクトスタンダードとして利用されている。

DOM (Document Object Model)  ツリー・ベースのAPI

SAX (Simple API for XML)    イベント・ベースのAPI

 

XMLデータを一気に読み込んで構文解析し、メモリ上にツリーを展開する(このツリーを「DOMツリー」と呼ぶ)。

DOMでは、このメモリ上に展開されたDOMツリーにアクセスしたり、要素を追加・削除することでXMLデータの構造を変更することができる。

 

先頭から順にXMLデータを読み込んでいき、“要素の開始”や“要素の終わり”といったイベントを生成、その都度アプリケーションに通知する。

アプリケーションはそれらのイベントを受け取ったときの処理を定義しておき、イベントを受け取ったときに呼び出されて処理を行う。

 

メモリー消費 DOM > SAX

アクセス DOM ランダム、SAX 一方通行

 

なるほどー。同じXMLの解析するにしても、根本の発想は全然違うんですね。

今まで自分がやろうとしていたのは、DOMの考え方。

レスポンスをDOM化して、DOMの中の場所を指定して、必要な情報を得る方法。

 

でも、スクレイピングでの使用を考えると、

DOMを操作することはないですよね。

XML全体を1回なめて、必要な情報を抽出すればいいわけだから、

SAXの方がメモリ消費が少ないからよさそう。

読み込み効率もいいみたいだし。

でもSAXはSAX向けのプログラミングを覚えないといけないんだね。

そこがちょっとめんどくさい。

 

あれ?

でも、XPathとかXQuery使うにはDOMツリーを構築する必要があるんじゃない?