Я пытался исследовать простой вопрос, который у меня был, но не мог этого сделать.Я пытаюсь получить данные из сети в формате XML и проанализировать их с помощью Perl.Теперь я знаю, как зацикливаться на повторяющихся элементах.Но я застреваю, когда это не повторяется (я знаю, что это может быть глупо).Если элементы повторяются, я помещаю их в массив и получаю данные.Но когда есть только один элемент, он выдает сообщение об ошибке «Не ссылка на массив».Я хочу, чтобы мой код был таким, чтобы он мог анализироваться одновременно (для одного и нескольких элементов).Код, который я использую, выглядит следующим образом:
use LWP::Simple;
use XML::Simple;
use Data::Dumper;
open (FH, ">:utf8","xmlparsed1.txt");
my $db1 = "pubmed";
my $query = "13054692";
my $q = 16354118; #for multiple MeSH terms
my $xml = new XML::Simple;
$urlxml = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=$db1&id=$query&retmode=xml&rettype=abstract";
$dataxml = get($urlxml);
$data = $xml->XMLin("$dataxml");
#print FH Dumper($data);
foreach $e(@{$data->{PubmedArticle}->{MedlineCitation}->{MeshHeadingList}->{MeshHeading}})
{
print FH $e->{DescriptorName}{content}, ' $$ ';
}
Кроме того, можно ли сделать что-то такое, чтобы разделитель $$ не печатался после последнего элемента?Я также попробовал следующий код:
$mesh = $data->{PubmedArticle}->{MedlineCitation}->{MeshHeadingList}->{MeshHeading};
while (my ($key, $value) = each(%$mesh)){
print FH "$value";
}
Но это печатает все дочерние узлы, и я просто хочу узел содержимого.