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

14
我注意到自从2005年以来,XML::RSS::Parser 没有更新。这仍然是解析 RSS 或 Atom 的推荐库吗?是否有更好的库或更好的方式?
4个回答

14

我不确定它曾经是“推荐的库”。如果我知道需要解析哪种类型的feed,我会使用适当的XML::RSSXML::Atom,但如果(更有可能的情况是)我只知道它是一个Web feed,我会使用XML::Feed

根据要求添加了使用XML::Feed的示例。

use XML::Feed;

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

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

这一切都几乎是从模块文档中复制的。


6
我现在更喜欢避免使用特定领域的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;
    ...
}

虽然代码不是最漂亮的,但它能正常运行。


你正在给XPath提供什么?是URL还是XML文件? - Ken Ingram

5
如果XML::RSS::Parser适用于您,请使用它。我曾使用XML::Parser处理RSS,但我的要求较为狭窄,并且XML::Parser已经安装好了。
仅仅因为某个工具已经几年没有更新并不意味着它不能再使用;我认为各种RSS/Atom规范最近都没有改变,所以解析器也没有必要进行更改。

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接