XML::简单不抓取单个XML节点



我正在使用MediaWiki API来获取搜索结果。我只想获取第一个结果的URL,标记为"Url"的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}

专业提示:使用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 ,这使得进行这种搜索变得更加容易。

最新更新