Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Parsing an XML datastructure

by existem (Sexton)
on Dec 14, 2004 at 12:41 UTC ( [id://414692]=perlquestion: print w/replies, xml ) Need Help??

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

Hello,
I posted a message a little while ago about a problem I was having with a CSV file... well i've given up on that one and i'm trying to read the XML file which has also been provided. I have used XML::Simple.pm, but that has given me a confusing datastructure, containing the following:

use XML::Simple; my $xml = XMLin($xmlfile); my @items = @{$xml->{Item}}; print "Contains: ".Dumper(@items);

This outputs the following...

$VAR1 = { 'Price' => '24.9899997711', 'SmallImageURL' => 'http://images.iwoot.com/thumbs/20qpuz_th +u.jpg', }; $VAR2 = { 'Price' => '24.9899997711', 'SmallImageURL' => 'http://images.iwoot.com/thumbs/8bunju_th +u.jpg', }; $VAR3 = { 'Price' => '24.9899997711', 'SmallImageURL' => 'http://images.iwoot.com/thumbs/DISRIF_th +u.gif', };

etc... can anyone just post up a bit of code to explain how I can read each of the values? Sorry its a dump question, but atleast I should be able to get this to work I hope ;-)

Thanks, Tom

Replies are listed 'Best First'.
Re: Parsing an XML datastructure
by existem (Sexton) on Dec 14, 2004 at 12:56 UTC

    Before I loose any more reputation (whatever that is) here is my solution I worked out all by myself - talk about stupid - what a muppet! ;-)

    #!/usr/local/bin/perl -w use XML::Simple; my $xml = XMLin($xmlsource); my @items = @{$xml->{Item}}; foreach my $item (@items) { print "$item->{ProductType}<br/>"; } # prints out all the item names

    Thanks, Tom

Re: Parsing an XML datastructure
by zejames (Hermit) on Dec 14, 2004 at 12:58 UTC

    Scalars in your @items array are hash references. Data can be accessed with :

    my $ref = shift @items; # print 'http://images.iwoot.com/thumbs/20qpuz_th print $ref->{'SmallImageURL'};

    Here you dereference $ref with ->, and then say that the referenced object is a hash, by using ->{..}.

    You can do the same with each value of your array.

    HTH


    --
    zejames
Re: Parsing an XML datastructure
by Animator (Hermit) on Dec 14, 2004 at 15:39 UTC
    You might want to take a close look at all the options that are available with XML::Simple... It's a powerfull module which can create a datastrcuture which is very close to your needs, that is if you use the correct options...

    Given that you refer to 'ProductType' in your second post it makes me guess that ProductType is the id of each element and that a hash might be better for your needs...

Re: Parsing an XML datastructure
by knoebi (Friar) on Dec 14, 2004 at 17:30 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://414692]
Approved by gellyfish
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2024-04-25 23:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found