J'ai demandé un lien question hier How do I retrieve tag attributes with XML::Simple? J'utilise pour obtenir le XML:Comment utiliser XML :: Simple avec des balises XML pouvant contenir un ou plusieurs sous-éléments?
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)
J'ai fait de très bons progrès et écrit le code suivant qui fait une boucle par les balises et les recherches pour ceux dont j'ai besoin. Je cherche tag 'doi' sous 'ArticleIds de
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;
}
}
Ce code recherche essentiellement pour la balise de ArticleIds et recherche ensuite subtags dessous pour trouver tag 'doi'. Le problème que je rencontre est que lorsque ArticleIds a plusieurs sous-balises sous lui (comme on peut le voir dans (2)) alors tout fonctionne bien. Cependant, lorsque la balise ArticleIds ne comporte qu'une seule sous-balise (comme indiqué en (1)), il y a des erreurs et le programme s'arrête. J'utilise le Simple Parser et en utilisant le dumper j'ai obtenu deux résultats. Voici une partie de la décharge pour le lien (1)
{ 'Type' => 'List', 'Item' => { 'Type' => 'String', 'content' => '19273512', 'Name' => 'pubmed' }, 'Name' => 'ArticleIds' }
pour le lien (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' }
Comme vous pouvez le voir. quand il y a plusieurs étiquettes sous ArticleIds alors il est traité comme un tableau, d'où les crochets.
Qu'est-ce que quelqu'un pourrait suggérer dans un cas comme celui-ci?
J'ai fait ce qui suit mais toujours s'il n'y a qu'un seul élément. Il vient dans un hachage. $ contents = get ($ getstring) $ données = $ xml-> XMLin ($ contents, ForceArray => qr {Item} x); –
dois-je faire quelque chose de différent puisque la balise Item que je veux mettre dans un tableau est sous tag ArticleIds? –
c'est frustrant ... :(est-il un moyen rapide de trouver la version XML :: Simple que j'utilise? –