Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re^2: XML::Simple parsing help

by jhoop (Acolyte)
on Dec 09, 2012 at 16:41 UTC ( #1007989=note: print w/replies, xml ) Need Help??

in reply to Re: XML::Simple parsing help
in thread XML::Simple parsing help

Thank you. Dereferencing this made me dizzy.

Replies are listed 'Best First'.
Re^3: XML::Simple parsing help
by Kenosis (Priest) on Dec 09, 2012 at 22:56 UTC

    You're most welcome!

    Your question has sparked many great solutions. Here's one option that uses Mojo::DOM to parse the XML.

    The parsing's in a subroutine, so you just send a dom object and the number, and a hash is returned with the requested data--if found:

    use Modern::Perl; use Mojo::DOM; use Data::Dumper; my $xml = <<'END'; <inventors type="array"> <inventor> <city>Aston Clinton</city> <name>Andy Barth</name> <number type="integer">1</number> <country>GB</country> <upper-name>ANDY BARTH</upper-name> </inventor> <inventor> <city>Aylesbury</city> <name>Daniele Dall'Acqua</name> <number type="integer">2</number> <country>GB</country> <upper-name>DANIELE DALL'ACQUA</upper-name> </inventor> <inventor> <city>Calne</city> <name>Nigel Drew</name> <number type="integer">3</number> <country>GB</country> <upper-name>NIGEL DREW</upper-name> </inventor> </inventors> END my $dom = Mojo::DOM->new($xml); my %record = getInventorNum($dom, 1); print Dumper \%record; sub getInventorNum { my ( $dom, $num ) = @_; my %hash; $dom->find('number')->each( sub { if ( $_->text == $num ) { for my $element ( @{ $_->parent->children } ) { next if $element->type eq 'number'; $hash{ $element->type } = $element->text; } } } ); return %hash; }

    Dumper output of %record:

    $VAR1 = { 'country' => 'GB', 'city' => 'Aston Clinton', 'upper-name' => 'ANDY BARTH', 'name' => 'Andy Barth' };

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1007989]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2018-07-22 15:04 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (454 votes). Check out past polls.