top / index / prev / next / target / source

2008-11-28 diary: イベントハンドリング・ベースの HTML パーサ、blancoHtmlParser を作成

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

イベントハンドリング・ベースの HTML パーサ、blancoHtmlParser を作成

a-san の日記に触発され、また、とある局面で必要になったので、私も ざっくりと HTML パーサーを作ってみました。

イベントハンドリング・ベースの HTML パーサ、blancoHtmlParser を作成

a-sanの日記に触発され、また、とある局面で必要になったので、私も ざっくりと HTML パーサーを作ってみました。のべ 2時間程度 かかりました。

blancoHtmlParser の特徴は XML の SAX イベントハンドラ似の構造になっている点です。HTMLのパースのみに責務を限定し、それ以外の部分は別途自前で作るという哲学になっています。責務が限定されているので、パーサーそのものはとてもシンプルです。ずっと このような仕様の HTML パーサーを作りたいと思っていて、あたためてきて、そして今回ようやく作ることができました。※なお、現状では 仕様はかなり限定的です。HTMLのエンコーディング判定などは未実装です。一方で、簡単なテストの範囲では、一定の可逆性があることまでは確認しました。

作るに至った、困った ある局面というのは、HTMLファイルの属性値に " や ' が付いていない困ったものを、簡単にハンドリングできるようにするためです。というのも、このような規格外の HTML を JSP 化しようとすると、該当箇所でコンパイルエラーが発生してしまい、作業が止まってしまうので、このような自前のHTMLパーサーがどうしても必要になったのです。

blancoHtmlParser を利用すると、ちょこっと (おそらく 20行ほど?) のコーディングを行うだけで、属性値が " や ' で囲まれていないものだけ " を付与するというコーディングなどを簡単に行うことができます。、、、ええと、簡単に利用できるといっても、簡単に利用できるためには SAX イベントハンドリングのノウハウが必要になります。でも、SAX イベントハンドリングに慣れ親しんだ人は、少数派ですよね… (苦笑)まあ、思うに blancoHtmlParser は少数の人のための 超便利ツール、といったところです。また、似たような哲学の HTMLパーサーは 他にも存在することは知っています。(似てはいるのですが、残念ながら、既存のプロダクトと 私の希望とは完全には一致しませんでした。)


この日記について