http://www.perlmonks.org?node_id=1044233

perlvroom has asked for the wisdom of the Perl Monks concerning the following question:

Ok, the following script does what i need, but i was hoping someone could school me on how to do this more effeciently:
use XML::Twig; my $t= XML::Twig->new( twig_handlers => { 'settings' => \&file, } ) ->parsefile( 'sample.xml'); sub file{ my($t, $settings)=@_; foreach($settings->att('key')){ if($settings->att('key') eq 'a'){ $a = $settings->att('value'); } if($settings->att('key') eq 'b'){ $b = $settings->att('value'); } } }
XML snippet:
<settings key="a" value="1"/>
<settings key="b" value="2"/>
The goal is to declare the "key" attribute as a variable with it's value equal to the "value" attribute in the same element, for all "settings" elements.

Replies are listed 'Best First'.
Re: Creating a hash out of multiple XML attributes in an elment
by mirod (Canon) on Jul 14, 2013 at 19:34 UTC

    I think you want something like this:

    my $key2value; my $t= XML::Twig->new( twig_handlers => { 'settings' => sub { file( +@_, $key2value); } } ) ->parsefile( 'sample.xml'); sub file{ my($t, $settings, $key2value)=@_; $key2value->{$settings->att( 'key')}= $settings->att( 'value'); }
      Yep. This is going to be a stupid question but how do i retrieve/print the value for, say, key "a"?

        $key2value is a hash reference, you retrieve the value for a this way: $key2value->{a}

        see perldata for more info.

        mirod used a key called "key", if you want a key called "a", maybe you should replace "key" with "a" or something like that, I haven't read perlintro so I'm not sure

Re: Creating a hash out of multiple XML attributes in an elment
by Jenda (Abbot) on Jul 15, 2013 at 15:20 UTC