basalto has asked for the wisdom of the Perl Monks concerning the following question:
Thanks in advance, Ricardo Dinisuse strict; use warnings; use XML::Twig; my $xml = <<XML; <doc> <fileHeader name='myTest'/> <SubNetwork id='CGRA01'> <MeContext id='Lisboa_1'> <data> <type>aaa</type> <var>a</var> </data> </MeContext> <MeContext id='Moscavide_2'> <data> <type>bbb</type> <var>b</var> </data> </MeContext> </SubNetwork> <SubNetwork id='CLOU01'> <MeContext id='Loures_3'> <data> <type>ccc</type> <var>c</var> </data> </MeContext> <MeContext id='Odivelas_3'> <data> <type>ddd</type> <var>d</var> </data> </MeContext> </SubNetwork> </doc> XML my $SUBNETWORK_EXCLUDE_LIST = { #'CLOU01' => 1 'CGRA01' => 1 }; my $start_tag_handlers = { 'SubNetwork' => \&SubNetwork, }; my $twig_roots = { 'fileHeader' => \&fileHeader, 'MeContext' => 1 }; local our $twig_handlers = { 'MeContext' => \&MeContext }; my $twig= new XML::Twig( start_tag_handlers => $start_tag_handlers, twig_roots => $twig_roots, twig_handlers => $twig_handlers ); print "\n### Parsing XML file ###\n"; my $root = $twig->parse( $xml ); sub SubNetwork { my ($twig, $tag, %att) = @_; print "\nSubNetwork: ".$att{id}; if (exists $SUBNETWORK_EXCLUDE_LIST->{$att{id}}) { print " => Excluded\n"; my $handler = sub { print $_[1]->att('id')." => Excluded\n"; $_[1] +->ignore() }; $twig->setStartTagHandler ('MeContext', $handler); } else { my $handler = { 'SubNetwork' => \&SubNetwork }; $twig->setStartTagHandlers ($handler); } return 0; } sub fileHeader { my ( $twig, $fileHeader) = @_; print "Name: ".$fileHeader->att('name')."\n"; return 0; } sub MeContext { my ( $twig, $MeContext) = @_; print "MeContext: ".$MeContext->att('id')."\n"; print "\tType: ".$MeContext->first_child('data')->first_child('type' +)->text."\n"; print "\tVar: ".$MeContext->first_child('data')->first_child('var')- +>text."\n"; $MeContext->purge; return 1; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Strange start_tag_handlers behaviour using twig module
by BaldManTom (Friar) on Apr 10, 2008 at 16:24 UTC | |
by basalto (Beadle) on Apr 11, 2008 at 00:19 UTC |