Stackoverflow的源是Atom提要,我无法使用XML::RSS
本身解析它们,并尝试了当前开发但仍然不成功的其他解析器。我解析feed的最接近的是使用XML::Atom::Feed
模块,但无法解开引用条目的链接对象。
use strict;
use warnings;
use feature 'say';
use XML::Atom::Feed;
my $url = 'http://stackoverflow.com/feeds/tag?tagnames=r&sort=newest';
my $feed = XML::Atom::Feed->new(URI->new($url))
or die XML::Atom::Feed->errstr;
for ($feed->entries) {
say $_->title, "\n", $_->link;
}
其中输出最新的三十个条目如下:
Rcpp: Returning C array as NumericMatrix to R
XML::Atom::Link=HASH(0x24cbf00)
我知道链接对象是一个哈希引用,但我似乎错过了一些东西。
另外,还有另一个模块可以更好地解析XML Atom提要吗?
答案 0 :(得分:3)
XML :: Atom没有完全记录。一旦你想出来,这是一个非常好的模块集合。无论如何,链接是具有各种可用方法的祝福对象,包括href
。
尝试类似:
for ($feed->entries) {
say $_->title, "\n", $_->link->href;
}
XML::Atom::Link的源代码将向您展示其他可用方法。这很容易理解。
答案 1 :(得分:2)
正如XML::Atom::Feed
文档所述,link()
方法是上下文敏感的,因此根据您的需要,您可能希望使用标量上下文,通过强制scalar
或隐式标量上下文分配给$link
,
for ($feed->entries) {
my $link = $_->link;
say $_->title, "\n", $link->href;
}
答案 2 :(得分:1)
正如the documentation所述,link()
方法返回XML::Atom::Link类型的对象。该类的文档不存在,但似乎它有一个href()
方法,可以提供您想要的结果。
for ($feed->entries) {
say $_->title, "\n", $_->link->href;
}