NekoHtmlでHIERARCHY_REQUEST_ERR

NekoHtmlXHTMLをパースしたときにDocument#getDocumentElement()でHIERARCHY_REQUEST_ERRというエラーになることがある。


このMLの投稿によると
http://marc.theaimsgroup.com/?l=xerces-j-dev&m=114614678604401&w=2
http://marc.theaimsgroup.com/?t=114614692100005&r=1&w=2


htmlのnamespaceまわりの問題らしい


xhtmlでは宣言で、

<html xmlns="http://www.w3.org/1999/xhtml">

と書いているが、NekoHtmlがそれをデフォルトネームスペースと見なさず、なんか子要素とかのパースで失敗するような感じ(ゆるいHTMLをうまいことパースするためのトレードオフ?イマイチよくわかってないが)。


対処としては、XHTML文書を

<html xmlns:html="http://www.w3.org/1999/xhtml">

と書き換えると動くようだ。
あるいはパーサーの設定で

parser.setFeature("http://xml.org/sax/features/namespaces", false);

とかとするとよいみたい(複数のnamespaceで凝ったつくりにしてるページだとちゃんと読めないかもしれんけど)。


あるいは、XHTMLってもともとXMLなんだから、NekoHtmlを使わず、そのままXMLとしてパースすればいいじゃんとも思った。でも、XHTMLって書いてても、書いてるだけで、XML宣言もなけりゃ、コメントもインチキだったりして、うまく読めないこともある。



XHTMLの書き方と留意点
http://www.kanzaki.com/docs/html/xhtml1.html
http://www.kanzaki.com/docs/html/valid-comment.html