はてなブログをDOM解析しようとしたら、SAXParseException。
あろうことか、本ブログをDOM解析しようとしたら、
SAXParseExceptionが発生してしまい、
DOMを構築できませんでした。
↓↓
取得したレスポンスをInputStreamとして、
そのままDocumentBuilderのparseメソッドに渡しただけです。
エラーログは、
「要素タイプ"html"に関連付けられている属性名"itemscope"の後には、' = '文字が必要です。」
当はてなブログのHTMLソースを見たところ、
下記の25行目のところ。
htmlタグに確かにitemscopeという属性があります。
困りました。
考えた対策は2つ。
A:InputStreamを文字列化して、該当のitemscopeのところだけ削除する。
削除した後の文字列をDOM解析させる。
B:DOM解析エラーでも落ちないようなXMLパーサーを探す。
できればBが見つかって欲しいですね。
Aは根本的な対処じゃないので、この先解析しようとしたHTMLの構造に不備があると、
その都度対策をしていかないといけないわけで、それは時間がかかりますよ。
Bで適度に構造に不備があればスキップしてくれたり、
適当に回避してくれるようなパーサーがあればいいのですが。
ちょっとネットで探してみたところ、IBMさんが詳しい事書いていました。
XML の構文解析でのエラーを処理するこれ読んでBの方針で対策を考えてみます。
それにしてもはてなブログさん、いきなりやってくれましたね。
itemscopeって何の属性やねんっていう話もありますけど、
正しくはitemscope="itemscope"という記載が正だそうです。
itemscopoeとは、マイクロデータを含んだ要素である事を示す 属性値。
ですが、マイクロデータって何?以降は追わないことにしました。
似た様な記述の仕方に、checked="checked"ってcheckedだけでもええやん。
みたいな話もあります。
解析しようとしたXMLが構造不備の場合なんて、
全然ありますもんね。
そんなの逐一エスケープ処理みたいなことしていたら、
一生が終わってしまいますよ。
なんとかBの方針でいける方法が見つかって欲しい。