in reply to
How to get paired values from the nested XML structure?
Would you like the data structure like this?
{
'Entity B' => {
'Boss' => 'Name',
'unitnumber' => '2',
'contactinfo' => {
'URL' => undef,
'email' => undef,
'Telefon' => {
'telnumber' => '456',
'directcall' => '78910',
'code' => '0999'
},
'Address' => {
'zip' => '11111',
'Street' => 'SomeOtherSt
+reet',
'Ort' => 'City',
'Building' => '2'
},
'Fax' => {
'telnumber' => '456',
'directcall' => '10987',
'code' => '0999'
}
},
'products' => {
'E5722' => 'few',
'C8099' => '522',
'F3596' => 'few',
'B0765' => '988',
'A1136' => '1982',
'D3938' => 'few'
}
},
'Entity A' => {
'Boss' => 'Name',
'unitnumber' => '1',
'contactinfo' => {
...
use strict;
use XML::Rules;
use Data::Dumper;
my $parser = XML::Rules->new(
rules => {
'excerpt' => 'pass no content',
'Address,Fax,Telefon,contactinfo,products' => 'no content',
'Boss,Building,Name,Ort,Street,URL,art_code,code,directcall,emai
+l,quantity,quantity_small,telnumber,unitnumber,zip' => 'content',
'article' => sub {
if (exists $_[1]->{quantity_small}) {
return #'%article' =>{
$_[1]->{art_code} => 'few' # };
} else {
return #'%article' => {
$_[1]->{art_code} => $_[1]->{quantity} #};
}
},
'unit' => 'no content by Name',
}
);
my $data = $parser->parse(\*DATA);
print Dumper($data);
__DATA__
<excerpt>
<unit>
<unitnumber>1</unitnumber>
...
The base set of rules was generated by: perl -MData::Dumper -MXML::Rules -e "print Dumper(XML::Rules::inferRulesFromExample( 'c:\temp\excerpt.xml'))"
Jenda
Enoch was right!
Enjoy the last years of Rome.