It's not clear to me what you are trying to achieve here (assigning a hash ref to an array doesn't make sense), but the following may help:
use warnings; use strict; use XML::Twig; use Data::Dump::Streamer; my $xml = <<XML; <config> <computer id="one" type="mac" os="XP" > <lease true="yes" /> <extra_device value="scanner"/> <entertainment> <game id="tekken" company="nameco" /> <platform value="pc only" /> <year value="1980" /> <game id="tekken 2" company="ninja" /> <platform value="pc and mac" /> <year value="1989" /> </entertainment> </computer> <computer id="two" type="pc" os="NT" > <lease true="no" /> <work> <software value="final" /> </work> </computer> <company_name id="nameco" origin="ca" type="violence" production="ye +s"> <sponsor name="sony" percentage="30" active="true"/> <sponsorlist> <sponsor id="sony1" active="false"/> <sponsor id="sony2" active="true"/> <sponsor id="sony3" active="false"/> </sponsorlist> </company_name> <company_name id="ninja" origin="ny" type="extreme violence" product +ion="yes"> <sponsor name="WB" percentage="20" active="true"/> <sponsorlist> <sponsor id="WB1" active="false"/> </sponsorlist> </company_name> </config> XML my $yahoo = 'one'; my @ones; my $twig = XML::Twig->new ( pretty_print => 'indented', twig_roots => { computer => sub {oneHandler (\@ones, $yahoo, @_);} } ); $twig->parse ($xml); Dump (\@ones); sub oneHandler { my ($ones, $yabal, $twig, $elt) = @_; return unless $elt->att ('id') eq $yabal; for my $child ($elt->children ()) { my %atts = %{$child->atts ()}; next unless %atts; push @$ones, \%atts; } }
Prints:
$ARRAY1 = [ { true => 'yes' }, { value => 'scanner' } ];
In reply to Re^5: xml::twig gathering all element and att and its value question
by GrandFather
in thread xml::twig gathering all element and att and its value question
by convenientstore
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |