我注意到自2005年以来XML::RSS::Parser尚未更新。这仍然是解析RSS或Atom的推荐库吗?有更好的方式还是更好的方式?
答案 0 :(得分:14)
我不确定它是否曾经是“推荐的图书馆”。如果我知道需要解析哪种Feed,我会根据需要使用XML::RSS或XML::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编写的,并且具有简约的依赖性。