in reply to XML::Simple: Loop through childnodes?
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: XML::Simple: Loop through childnodes?
by Herkum (Parson) on Feb 16, 2007 at 03:10 UTC | |
|
Re^2: XML::Simple: Loop through childnodes?
by Anonymous Monk on Mar 28, 2011 at 21:21 UTC |