2

MediaWiki API を使用して検索結果を取得しています。最初の結果、「Url」とマークされた XML 要素への URL を取得したいだけです。最終的には、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}
4

1 に答える 1

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。これにより、この種の検索がはるかに簡単になります。

于 2012-12-16T04:45:23.463 に答える