我正在使用MediaWiki API来获取搜索结果。我只想抓取第一个结果的URL,即标记为“Url”的XML元素。最终会有其他的事情我想要用XML来做,但我想在得到这个答案后我会意识到我做错了什么,并能够做其他的事情。 Here是我正在使用的页面。XML ::简单不抓取单个XML节点
require HTTP::Request;
require LWP::UserAgent;
require XML::Simple;
my $url = URI->new("http://en.wikipedia.org/w/api.php?action=opensearch&search=rooney&limit=10&namespace=0&format=xml");
my $request = HTTP::Request->new(GET => $url);
my $ua = LWP::UserAgent->new;
my $response = $ua->request($request);
my $xml = XML::Simple->new();
my $data = $xml->XMLin($response->content);
一切都到这里似乎工作正常。我的HTTP请求通过好(如果我只是打印$response->content
它返回的XML内容罚款,如果我打印$data
,我被告知它是一个散列
为了获得'Url'元素,我试过根据我已经做了搜索各种不同的方法如下几个:
print $data->{'Url'};
print $data->{Url};
print $data{Url}
“XML :: Simple”模块通过第一行来建立其命名空间,我很遗憾新程序员仍然选择仅仅因为它的标签而使用它。它的作者已经付出了很多努力来改进它,但它仍然无法正确区分元素和属性,并且不会始终保持XML文档中元素的顺序。它错误地处理了处理指令,实体,命名空间,CDATA,PCDATA,注释等等。如果您的XML数据很琐碎,并且知道您在做什么,请仅使用XML :: Simple * *。 – Borodin
我想我并不总是知道自己在做什么,特别是使用Perl。你能建议最好的选择吗? –
XML :: LibXML,XML :: Twig或XML ::规则是最近流行的选择 – mirod