use strict; use warnings; use XML::TreeBuilder; use XML::Twig; my $xml = do {local $/; }; print "Using TreeBuilder:\n"; my $root = XML::TreeBuilder->new (); $root->parse ($xml); my @itemNodes = $root->look_down ('_tag', 'item'); my $nodeCount; for my $nodeIndex (0 .. @itemNodes - 1) { my @titles = $itemNodes[$nodeIndex]->look_down ('_tag', 'title'); print "Item node " . ($nodeIndex + 1) . "\n"; print " ", $_->as_text (), "\n" for @titles; } print "\nUsing Twig\n"; my $t= XML::Twig->new (twig_roots => {item => \&data}); $t->parse ($xml); sub data { my ($t, $data) = @_; ++$nodeCount; print "Item node $nodeCount\n"; my @titles = $data->descendants ('title'); print " ", $_->trimmed_text (), "\n" for @titles; } __DATA__ Foo Bar Baz Foobar #### Using TreeBuilder: Item node 1 Foo Item node 2 Baz Using Twig Item node 1 Foo Item node 2 Baz