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

Re^3: XML::Simple parsing help

by Kenosis (Priest)
on Dec 09, 2012 at 22:56 UTC ( #1008011=note: print w/replies, xml ) Need Help??


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

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?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1008011]
help
Chatterbox?
[GrandFather]: Us: "What scaling do we need to apply to the numbers from the SDK for the wibble?". Them: "Oh, the numbers from the SDK for the wibble are already correct, they don't need scaling"
[GrandFather]: In our code: wibble range 1 scale by 1, range 2 scale by 2, range 3 scale by 4, range 4 scale by 8

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2017-08-24 07:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Who is your favorite scientist and why?



























    Results (365 votes). Check out past polls.

    Notices?