#!/usr/bin/perl --
#~ 2011-07-23-08:42:20+0000 by Anonymous Monk
#~ perltidy -csc -otr -opr -ce -nibc -i=4
use strict;
use warnings;
use autodie; # dies if open/close... fail
use Data::Dumper;
use XML::Twig;
Main( @ARGV );
exit( 0 );
sub Main {
Demo();
}
sub NotDemoMeaningfulName {
my ($xml) = @_;
my @data;
my %site;
my $t = XML::Twig->new(
twig_handlers => {
'//Site' => sub {
warn $_->path;
push @data, {%site} if %site;
%site = ();
$_->purge; # free memory
},
'//Site/Id' => sub {
warn $_->path;
$site{Id} = $_->trimmed_text;
},
'//Site/Title' => sub {
warn $_->path;
$site{Title} = $_->trimmed_text;
},
},
);
$t->xparse($xml);
$t->purge;
return \@data;
} ## end sub NotDemoMeaningfulName
sub Demo {
my $ref = NotDemoMeaningfulName( DemoData() );
print Dumper($ref);
}
sub DemoData {
#~ http://perlmonks.com/?abspart=1;displaytype=displaycode;node_id=916
+054;part=1
my $xml = <<'__XML__';
<Catalog>
<Category>
<Name>Arts & Entertainment</Name>
<Site>
<Id>01-id...</Id>
<Title>01-title...</Title>
</Site>
<Site>
<Id>02-id...</Id>
<Title>02-title...</Title>
</Site>
</Category>
</Catalog>
__XML__
return $xml;
} ## end sub DemoData
__END__
$ perl xml.twig.916054.pl
/Catalog/Category/Site/Id at xml.twig.916054.pl line 30.
/Catalog/Category/Site/Title at xml.twig.916054.pl line 34.
/Catalog/Category/Site at xml.twig.916054.pl line 24.
/Catalog/Category/Site/Id at xml.twig.916054.pl line 30.
/Catalog/Category/Site/Title at xml.twig.916054.pl line 34.
/Catalog/Category/Site at xml.twig.916054.pl line 24.
$VAR1 = [
{
'Id' => '01-id...',
'Title' => '01-title...'
},
{
'Id' => '02-id...',
'Title' => '02-title...'
}
];
|