我正在使用MediaWiki API来获取搜索结果。我只想抓取第一个结果的URL,标记为“Url”的XML元素。最终我会想要用XML做其他事情,但我想在得到答案时我会意识到我做错了什么并且能够做其他事情。 Here是我正在使用的页面。
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}
答案 0 :(得分:3)
专业提示:使用Data::Dumper
查看数据结构。
use Data::Dumper;
print Dumper($data);
你会得到这样的东西......
$VAR1 = {
'xmlns' => 'http://opensearch.org/searchsuggest2',
'Section' => {
'Item' => [
{
'Url' => {
'content' => 'http://en.wikipedia.org/wiki/Rooney',
'xml:space' => 'preserve'
},
'Description' => {
'content' => 'Rooney may refer to:',
'xml:space' => 'preserve'
},
'Text' => {
'content' => 'Rooney',
'xml:space' => 'preserve'
}
},
... much much more ...
您可以从中推断出所需数据的路径是通过
$data->{Section}{Item}[0]{Url}{content}
您还应该考虑使用XML::XPath
这样的内容,这样可以更轻松地进行此类搜索。