I find XML::Simple to be very simple if the XML is very simple, but with non-trivial XML I am often surprised by what it produces and, if I persist with it, end up spending a lot of time re-reading the documentation and studying Data::Dumper dumps.
Here is an example which shows, step by step as I worked it out, how to access the source_name element...
use strict;
use warnings;
use Data::Dumper;
my $VAR1 = {
'sas_residue_annotation' => [
{
'xmlns' => 'http://www.ebi.ac.uk/WSsas/Schema',
'sources' => [
{
'source' => [
{
'source_name' => [ '1iho' ],
'ref_evalue' => [ '5.5e-50' ],
'ref_overlap' => [ '282' ],
'ref_identity' => [ '47.20' ],
'ref_pmid' => [ '11377204' ]
},
{
'source_name' => [ '1mop' ],
'ref_evalue' => [ '8.3e-38' ],
'ref_overlap' => [ '264' ],
'ref_identity' => [ '43.60' ],
'ref_pmid' => [ '12717031' ]
},
{
'source_name' => [ '1n2b' ],
'ref_evalue' => [ '8.2e-38' ],
'ref_overlap' => [ '264' ],
'ref_identity' => [ '43.60' ],
'ref_pmid' => [ '12717031' ]
},
],
},
],
},
],
};
print Dumper($VAR1);
print Dumper($VAR1->{sas_residue_annotation});
print Dumper($VAR1->{sas_residue_annotation}[0]);
print Dumper($VAR1->{sas_residue_annotation}[0]{sources});
print Dumper($VAR1->{sas_residue_annotation}[0]{sources}[0]);
print Dumper($VAR1->{sas_residue_annotation}[0]{sources}[0]{source});
foreach my $source (@{$VAR1->{sas_residue_annotation}[0]{sources}[0]{s
+ource}}) {
print "source name: ", join(',',@{$source->{source_name}}), "\n";
}
Note that I wrote each successive print after studying the output of the previous one. It is a bit tedious, but for deeply nested structures I find it faster than trying to do it all in my head and then debugging my errors. |