|
If I use XML:Simple to process the XML as in the code at the end, I get the following data structure when no options are supplied to XMLin:
$VAR1 = {
'dc:subject' => [
{
'xsi:type' => 'ebankterms:CompoundClass',
'content' => 'Organic'
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => 'cycloadditions'
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => '1,3-dicarbonyl compounds'
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => 'mesoionics'
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => 'tautomerism'
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => 'thioisomnchnones '
},
{
'xsi:type' => 'ebankterms:Keywords',
'content' => 'Halogen-halogen interactions'
}
]
};
However if I try to use a keyattr option to XMLin (see code) the multiple values of ebankterms:Keywords are not retained since no array or hash of hashes is created to accommodate them.
$VAR1 = {
'dc:subject' => {
'ebankterms:CompoundClass' => {
'content' => 'Organic'
},
'ebankterms:Keywords' => {
'content' => 'Halogen-halogen interactions'
}
}
};
Is this the expected behaviour? I have looked through the various other options and can't find anything that will modify this behaviour. Is it possible to use the keyattr option to distinguish between the various dc:subject elements (ebankterms:CompoundClass, ebankterms:Keywords) (as in the 2nd example), but still get access to all the values of dc:subject ebankterms:Keywords (as in the first example)? Code with example XML below.
#!/usr/bin/perl5.8.0
use XML::Simple;
use Data::Dumper;
$xml = "<record><dc:subject xsi:type=\"ebankterms:CompoundClass\">Organic</dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">cycloadditions</dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">1,3-dicarbonyl compounds</dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">mesoionics</dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">tautomerism</dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">thioisomnchnones </dc:subject>
<dc:subject xsi:type=\"ebankterms:Keywords\">Halogen-halogen interactions</dc:subject></record>";
# eval { $xp = XMLin($xml) };
eval { $xp = XMLin($xml, keyattr => {'dc:subject'=>'xsi:type'} ) };
# eval { $xp = XMLin($xml, forcearray=>1,keyattr => {'dc:subject'=>'xsi:type'} ) };
print Dumper($xp);
Monica
|