本を読む

読書やコンピュータなどに関するメモ

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のフィードのパースエラーが起きていたので、調べてみた。 の続き。 ...

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad