http://qs321.pair.com?node_id=721530


in reply to trying to understand xml::twig and also trying to learn how to extract attribute

You're not a long way away from what you need to do. twig_roots supplies a reference to a sub to handle matching elements. Consider:

use warnings; use strict; use XML::Twig; my $xmlStr = <<XML; <config> <one id="msn" type="shopping"> <traffic> <daily value="on" /> <weekly value="off" /> <monthly value="off" /> </traffic> </one> <one id="movies" type="entertainment"> <traffic> <daily value="on" /> <weekly value="off" /> <monthly value="on" /> </traffic> </one> <one id="espn" type="sports"> <traffic> <daily value="on" /> <weekly value="on" /> <monthly value="on" /> <hyper value="true" /> </traffic> </one> </config> XML my $result = ''; my $twig = XML::Twig->new (twig_roots => {one => sub {oneHandler (\$re +sult, @_);}}); $twig->parse ($xmlStr); print $result; sub oneHandler { my ($resRef, $twig, $elt) = @_; $$resRef = join ' ', $$resRef, $elt->att ('id'); return; }

Prints:

msn movies espn

Note that there were a few missing close " in your sample XML that I've fixed.

Also notice that I created an anonymous sub so I could pass extra parameters into the handler thus avoiding the need for global variables.


Perl reduces RSI - it saves typing