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


in reply to XML::Simple help

Here is my try with XML::Twig.

use XML::Twig; my $hash; my $t= XML::Twig->new( twig_handlers => { charge => sub{ $hash->{$_[1]->{'att'}-> +{'code'} }=$_[1]->{'att'}->{'name'}}, }, ); $t->parse( '<charge-type-control> <charge code="FRT" name="frtamt"/> <charge code="SV1" name="savamt"/> <charge code="SV2" name="savamt"/> <charge code="SV3" name="savamt"/> <charge code="SV4" name="savamt"/> <charge code="SV5" name="savamt"/> </charge-type-control>'); print $_."\t".$hash->{$_}."\n" for keys %{$hash};

regards
Murugesan Kandasamy

Replies are listed 'Best First'.
Re^2: XML::Simple help
by mirod (Canon) on Mar 08, 2005 at 07:16 UTC

    A couple of comments:

    • in a handler you can use $_ as an alias for $_[1]
    • unless speed is a big concern, you should really use the proper methods to access attributes, and write $_->att( 'code') instead of $_->{'att'}->{'code'} and $_->set_att( code => $value) instead of $_->{'att'}->{'code'}= $value: there is no guaranty that the attributes will always be in a simple hash, nor than the methods only read or assign to the att hash (they do at the moment, but is very likely to change).

    With those changes, the handler code becomes:

    sub{    $hash->{$_->att('code')}=$_->att->( 'name'); }