FireFoxのHTMLパーサ
ブラウザのパーサは壊れたHTMLをてきとうに解釈しててきとうに表示してくれる。
たとえば
<ul></li>....</li></ul>
のように論理的におかしいものでも、だいたいは思ったとおりに表示されたりする。
が、XML::XPath::XMLParser のようなパーサは壊れているのは not well-formed というだけで相手にしてくれない。世の中にアップロードされているHTMLはおおむね not well-formed で(バリデータなんて誰もかけたしないのだ)、だから壊れているやつは事前に適当に解釈してあげてからパーサにかける必要がある。
そこでFireFoxに似た解釈をてきとうに実装しようと思ったものの、やつの解釈の方法は実に難解だ。
<ul id="unordered_list">
<li>
<a href="http://google.com/">google
<div>search engine</div>
</ul>
こういう泣きたくなるようなソースを書いて $(”unordered_list”).innerHTML の中身を見てみると
<ul id="unordered_list">
<li>
<a href="http://google.com/">google</a>
<div>
<a href="http://google.com/">search engine</a>
</div>
</li>
</ul>
となっていることがわかる。
まったくアルゴリズムが推測できない。(こんなHTMLを書いてるほうの意図も推測できないが)
mozilla.orgで探すと mozilla/parser/htmlparser あたりが関係ありそう。
cvs -d :pserver:anonymous:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/parser/htmlparser でソースを取ってきて中身を見ると
mozilla/parser/htmlparser/src/nsElementTable.cpp にタグの親子関係、自動的にタグを閉じたりするか、等が定義されているようにみえる。みたかんじここでは not well-formed なものを適当に直す、まではやっていなそうだ。みちのりはとおい。
About this entry
You’re currently reading “FireFoxのHTMLパーサ,” an entry on ku
- Published:
- 2006.09.22 / 10pm
- Category:
- Firefox

No comments
Jump to comment form | comments rss [?] | trackback uri [?]