RSS 0.9のDTDがlibxmlでエラーになる
Plaggerで、今月に入ってからRSS 0.9のフィードのパースエラーが起きていたので、調べてみた。
試しにこんなRSSファイルを用意する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
"http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
</rss>
このRSSファイルをこんなPerlスクリプトで読み込む。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Feed::RSS;
$XML::Feed::RSS::PREFERRED_PARSER = 'XML::RSS::LibXML';
my $content = do { local $/; <>; };
XML::Feed->parse(\$content);
こんなエラーになる。
http://netscape.aol.com:4: parser error : Content error in the external subset <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ^ http://netscape.aol.com:4: parser error : Content error in the external subset <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ^ Can't call method "getNamespaces" on an undefined value at /usr/share/perl5/XML/RSS/LibXML/Parser.pm line 77.
「Content error in the external subset」というメッセージ文字列は、libxmlのparser.cにあるようだ。
DTDのURLを変えてみる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
"http://www.rssboard.org/rss-0.91.dtd">
<rss version="0.91">
</rss>
今度はエラーが出ない。
ちなみに、ブラウザでhttp://my.netscape.com/publish/formats/rss-0.91.dtdにアクセスすると、http://netscape.aol.com/にリダイレクトされる。
コメント
コメントの投稿
トラックバック
http://emasaka.blog65.fc2.com/tb.php/450-39791e44
RSS 0.9のDTDをXMLカタログでさしかえる
RSS 0.9のDTDがlibxmlでエラーになる
Plaggerで、今月に入ってからRSS 0.9のフィードのパースエラーが起きていたので、調べてみた。
の続き。
...
