Я задал вопрос вчера Как получить атрибуты тега с помощью XML :: Simple? ссылка, которую я использую для получения XML:
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=19273512 (1)
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=19291509 (2)
Я добился очень хороших результатов и написал следующий код, который просматривает теги и ищет нужные мне. Я ищу тег 'doi' в 'ArticleIds'
foreach $item_node (@{$dataSummary->{DocSum}->{Item}})
{
if($item_node->{Name} eq 'ArticleIds')
{
foreach $item_node1 (@{$item_node->{Item}})
{
if ($item_node1->{Name} eq 'doi')
{
$doi= $item_node1->{content};
last;
}
}
last;
}
}
Этот код в основном ищет тег ArticleIds, а затем ищет подтеги под ним, чтобы найти тег 'doi'.
Проблема, с которой я столкнулся, заключается в том, что когда ArticleIds имеет несколько вложенных тегов (как видно из (2)), тогда все работает нормально. Однако, когда тег ArticleIds содержит только ОДИН подтег, как показано в (1), тогда возникают ошибки, и программа просто останавливается.
Я использую Simple Parser и использую дампер, я получил два результата.
Вот какая-то часть свалки
по ссылке (1)
{ 'Type' => 'List', 'Item' => { 'Type' => 'String', 'content' => '19273512', 'Name' => 'pubmed' }, 'Name' => 'ArticleIds' }
для ссылки (2)
{ 'Type' => 'List', 'Item' => [ { 'Type' => 'String', 'content' => '909564644', 'Name' => 'pii' }, { 'Type' => 'String', 'content' => '10.1080/13506120802676914', 'Name' => 'doi' }, { 'Type' => 'String', 'content' => '19291509', 'Name' => 'pubmed' } ], 'Name' => 'ArticleIds' }
Как видите. когда есть несколько тегов под ArticleIds, то он обрабатывается как массив, следовательно, квадратные скобки.
Что бы кто-нибудь предложил в таком случае?