我試圖研究一個簡單的問題,但我做不到。我試圖從XML獲取數據,並使用Perl解析它。現在,我知道如何循環重複元素。但是,當它不重複時(我知道這可能很愚蠢),我被卡住了。如果元素重複,我把它放在數組中並獲取數據。但是,當只有一個元素時,它會拋出錯誤,並說'不是數組引用'。我希望我的代碼能夠同時解析(單個和多個元素)。我使用的代碼如下:使用perl的XML解析
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";
}
但是,這種打印所有的childNodes,我只是想要的內容節點。