libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる

さいきんlibxmlでHTMLを読み込んでXPathで要素を取り出すのが一部([xml][libxml2][c]XMLをHTTPで取得して、XPathで指定された中身をC言語で取り出す方法 - グニャラくんのグニャグニャ備忘録@はてな)ではやっています。

これにちょっと癖があってはまりました。
<html><body>
<ul id="list">
  <li>hello</li>
  <li>world</li>
</ul>
</body></html>
こういうHTMLファイルを読み込んで id("list")/li というXPathを評価させるとなぜか何にもマッチしないのです。でもこれを //*[@id="list"]/li に置き換えるとhelloとworldを囲んでいるliふたつにマッチするようになるので、パース自体は問題ないようです。 で、いろいろいじっていたらなんでもいいのでHTMLにDOCTYPEをいれるとid関数が使えるのに気がつきました。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><body>
<ul id="list">
  <li>hello</li>
  <li>world</li>
</ul>
</body></html>
にするとid("list")/liでliふたつがマッチするようになりました。

Module HTMLparser from libxml2にはthis module implements an HTML 4.0 non-verifying parser with API compatible with the XML parser ones. と書かれていて、ベリファイしないけどHTML4.0のパーサというのがどういう意味なのかわかりませんが(HTML4.0で定義されている要素であれば、その論理構造を考慮した上でwell-formedにしてくれるということでしょうか)、とりあえずid関数が使えるようになりました。

tags

  • C/C++
  • XML
  • XPath
  • 「libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる」のはてなブックマーク数
  • 「libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる」deliciousブックマーク数
  • 「libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる」をはてなブックマークに追加
  • save "libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる" to del.icio.us
  • 「libxmlのHTMLパーサ+XPathでid関数が使えなくてはまる」をリアルタイムブログ検索
  • permalink
  • クローンサービスのAPIデザイン
  • Firefoxのヒストリぜんぶをfaviconにして見る!

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .07. 11 19:32

tagcloud

  • API3
  • C/C++3
  • E4X1
  • FUSE2
  • Firefox29
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • WebKit1
  • XML2
  • XPCOM4
  • XPath5
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design2
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript22
  • linux1
  • logging2
  • mobile4
  • perl6
  • tips6
  • tool11
  • vim2
  • visualization4
  • widget1
  • wii3
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.07 (3)
  • 2008.06 (4)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines