Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: XML::Simple: Loop through childnodes?

by GrandFather (Saint)
on Feb 16, 2007 at 01:01 UTC ( [id://600339]=note: print w/replies, xml ) Need Help??


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

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: XML::Simple: Loop through childnodes?
by Herkum (Parson) on Feb 16, 2007 at 03:10 UTC

    I will agree with GrandFather, unless the document is very simple XML, XML::Simple takes some work to get right. Use XML::Twig, it might take a little while to figure it out but is more scalable than XML::Simple.

Re^2: XML::Simple: Loop through childnodes?
by Anonymous Monk on Mar 28, 2011 at 21:21 UTC
    I am writing my first ever Perl script, and without this example I would be lost. Thanks a lot for posting this!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://600339]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2024-04-19 20:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found