I find generally that XML::Simple ain't. Try XML::TreeBuilder or XML::Twig instead:
use strict; use warnings; use XML::TreeBuilder; use XML::Twig; my $xml = do {local $/; <DATA>}; 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__ <inbox> <item> <title>Foo</title> <description>Bar</description> </item> <item> <title>Baz</title> <description>Foobar</description> </item> </inbox>
Prints:
Using TreeBuilder: Item node 1 Foo Item node 2 Baz Using Twig Item node 1 Foo Item node 2 Baz
In reply to Re: XML::Simple: Loop through childnodes?
by GrandFather
in thread XML::Simple: Loop through childnodes?
by Spidy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |