什么是在Perl中解析RSS / Atom的最佳库?

时间:2010-10-20 01:25:13

标签: xml perl rss cpan atom-feed

我注意到自2005年以来XML::RSS::Parser尚未更新。这仍然是解析RSS或Atom的推荐库吗?有更好的方式还是更好的方式?

4 个答案:

答案 0 :(得分:14)

我不确定它是否曾经是“推荐的图书馆”。如果我知道需要解析哪种Feed,我会根据需要使用XML::RSSXML::Atom,但如果(更有可能)我知道它是一个网络Feed,我使用{{3} }。

添加使用XML :: Feed的示例..

use XML::Feed;

my $feed = XML::Feed->parse(\$string_containing_feed);

foreach ($feed->entries) {
  print $_->title, "\n";
  print $_->content->body, "\n";
}

这些都是从模块文档中复制的。

答案 1 :(得分:5)

如果XML :: RSS :: Parser适合您,那么请使用它。我使用XML :: Parser来处理RSS,但我的要求很窄,而且已经安装了XML :: Parser。

仅仅因为某些事情在几年内得到了更新并不意味着它不再起作用;我认为最近各种RSS / Atom规范都没有改变,所以不需要改变解析器。

答案 2 :(得分:5)

我实际上喜欢避免使用特定于域的XML解析器,而只是使用XPath来处理所有事情。这样我只需要记住一个API。 (除非它是一个巨大的XML,否则我将使用基于事件的解析器,如XML::Parser。)

所以使用XML::XPath,我可以从这样的RSS文件中获取一堆东西:

my $rss = get_rss();
my $xp = XML::XPath->new( xml => $rss );

my $stories = $xp->find( '/rss/channel/item' );

foreach my $story( $stories->get_nodelist ) {
    my $url   = $xp->find( 'link',  $story )->string_value;
    my $title = $xp->find( 'title', $story )->string_value;
    ...
}

这不是世界上最漂亮的代码,但它确实有用。

答案 3 :(得分:4)

还有一个名为XML::FeedPP的非常好的模块(参见http://search.cpan.org/dist/XML-FeedPP/lib/XML/FeedPP.pm)。 FeedPP并不是那么快,但它几乎是用纯粹的Perl编写的,并且具有简约的依赖性。