Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

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

by GrandFather (Saint)
on Nov 04, 2008 at 23:27 UTC ( #721530=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (2)
As of 2022-05-24 03:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (82 votes). Check out past polls.

    Notices?