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

I should have noted that the cleaned up XML is licensed under the Perl license so use it by all means. ;)


Perl reduces RSI - it saves typing
  • Comment on Re^2: trying to understand xml::twig and also trying to learn how to extract attribute

Replies are listed 'Best First'.
Re^3: trying to understand xml::twig and also trying to learn how to extract attribute
by convenientstore (Pilgrim) on Nov 05, 2008 at 20:00 UTC
    thank you guys
    Grandfather's solution is *bit* above my head at this point
    But eventually, I like my code to look like that(once I have better understanding)
    so I tried the second solution with bit of modification, but the way I am doing is I am sure wrong(as it's not working)
    I wanted to loop through and find monthly value eq 'on' and then push a certain elements and attribute in the array which I can loop through later for usage...
    #!/usr/bin/perl use strict; use warnings; use Data::Dumper; 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 @ids; my $t = XML::Twig->new(); $t->parse($xmlStr); for my $one ( ($t->root()->children('one') ) { for my $month ( ($t->root()->children('monthly') ) { if ( $momth->att('value') eq 'on' ) { push @ids, $one->att('id'); } } } print Dumper(\@ids);

      If you ask specific questions about the code you don't understand you may get answers that help. If you have trouble with the code so too will others - by asking you help many people.


      Perl reduces RSI - it saves typing
      Your problem is that "monthly" is not a child of root ("config"); it is a child of "traffic". I think you want this:
      my @ids; my $t = XML::Twig->new(); $t->parse($xmlStr); for my $one ($t->root()->children('one')) { if ($one->first_child('traffic')->first_child('monthly')->att('val +ue') eq 'on') { push @ids, $one->att('id') } } print Dumper(\@ids); __END__ $VAR1 = [ 'movies', 'espn' ];
        this gives me much better idea and also give me more idea for further code.. will get back to you soon.. thank you.