急がば回れ

HTMLの解析に,とりあえず難しいことをしないからという理由で,javax.swing.text.html.parserパッケージのHotJavaで使われていたHTMLパーサを使っていた.
とりあえず目的は達しつつあったものの,どうも解析ミスが多い.たとえば,XHTMLのbr要素をうまく処理できずに「/」が残るバグ(Bug ID 4806463)があったが,これはJDK 6で修正されたことが判明.しかし,元々HTML 3.2用のパーサなのと,入力に問題があった時の処理が他のタグの解析までミスするなどロバストでないこともあり,一旦このプログラムを修正して使うことにしてハックしはじめた.
しかし,調べてみるとDTD(html32.bdtdというバイナリファイル)にも手を入れないといけなそうだし,エラー処理にもいろいろ手を入れないといけない.最終的にJericho HTML ParserのHTMLパーサの比較で,以下のようにこの修正がかなり困難で誰も実現できていないことを示す記述があったので,改造を断念して,既存のHTMLパーサを使う方針に変更した.

Requires a DTD to function, but only comes with HTML3.2 DTD which is unsuitable. Even if an HTML 4.01 DTD were found, the parser itself might need tweaking to cater for the new element types. The DTD needs to be in the format of a "bdtd" file, which is a binary format used only by Sun in this parser implementation. I have found many requests for a 4.01 bdtd file in newsgroups etc on the web, but they all reamain unanswered. Building it from scratch is not so easy.

というわけで,結局一日無駄にしてしまった…「急がば回れ」とはまさにこのことであろう.