Я пытаюсь проанализировать абстрактную часть из файла XML.Я использую Forcearray.Я написал код, но он просто работает, когда аннотация находится в массиве и не работает, когда массив отсутствует.Это потому, что когда в массиве я также использую {content}, а когда нет в массиве, {content} отсутствует.Код выглядит следующим образом:
use LWP::Simple;
use XML::Simple;
use Data::Dumper;
open (FH, ">:utf8","xmlparsed2.txt");
my $db1 = "pubmed";
my $query = "9915366";
my $q = 16404398;
my $xml = new XML::Simple;
$urlxml = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=$db1&id=$q&retmode=xml&rettype=abstract";
$dataxml = get($urlxml);
$data = $xml->XMLin("$dataxml", ForceArray => [qw( MeshHeading Author AbstractText )], ForceContent => 1);
print FH Dumper($data);
print FH "Abstract: ".join "\n", map {join ":",($_->{NlmCategory},$_->{content})} @{$data->{PubmedArticle}->{MedlineCitation}->{Article}->{Abstract}->{AbstractText}};
print FH "\n";
print FH "Title: "."$data->{PubmedArticle}->{MedlineCitation}->{Article}->{ArticleTitle}\n";
print FH "\n";
print FH "MeSH: ".join '$$', map $_->{DescriptorName}{content}, @{$data->{PubmedArticle}->{MedlineCitation}->{MeshHeadingList}->{MeshHeading}};
print FH "\n";
print FH "Authors: ".join '$$', map {join " ",($_->{LastName},$_->{ForeName})} @{$data->{PubmedArticle}{MedlineCitation}{Article}{AuthorList}{Author}};
Хорошо, когда в массиве (replcae $ q в $ urlxml by $ query) я хочу реферат с его NlmCategory, например Цель: определить, длинна ли ...... .Для приведенного выше кода он дает мне желаемый результат, но с хешем в конце, как показано ниже:
METHODS:Tertiary care outpatient and inpatient rehabilitation center directly attached to a university hospital.:HASH(0x69d0810).
А для аннотации, где это не массив ($ q в $ urlxml), этот код не 'Кажется, что это работает, возможно, потому что нет термина контента (я нашел это в дампере данных).Я немного поиграл, и это сработало, если я сделал что-то вроде $ _ для массива, но также напечатал два ::.Короче говоря, я хочу, чтобы мой код работал как для $ query, так и для $ q.Вы можете помочь?