Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Perl XML

by mecrazycoder (Sexton)
on Aug 13, 2009 at 16:33 UTC ( #788370=perlquestion: print w/ replies, xml ) Need Help??
mecrazycoder has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks, Is there any way to parse the xml and store the values alone in arrays. For eg ,
<?xml version="1.0"?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description> </book> <book id="bk103"> <author>Corets, Eva</author> <title>Maeve Ascendant</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2000-11-17</publish_date> <description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society.</description> </book> <book id="bk104"> <author>Corets, Eva</author> <title>Oberon's Legacy</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2001-03-10</publish_date> <description>In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for the inhabitants of London. Sequel to Maeve Ascendant.</description> </book> <book id="bk105"> <author>Corets, Eva</author> <title>The Sundered Grail</title> <genre>Fantasy</genre> <price>5.95</price> <publish_date>2001-09-10</publish_date> <description>The two daughters of Maeve, half-sisters, battle one another for control of England. Sequel to Oberon's Legacy.</description> </book> <book id="bk106"> <author>Randall, Cynthia</author> <title>Lover Birds</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-09-02</publish_date> <description>When Carla meets Paul at an ornithology conference, tempers fly as feathers get ruffled.</description> </book> <book id="bk107"> <author>Thurman, Paula</author> <title>Splish Splash</title> <genre>Romance</genre> <price>4.95</price> <publish_date>2000-11-02</publish_date> <description>A deep sea diver finds true love twenty thousand leagues beneath the sea.</description> </book> <book id="bk108"> <author>Knorr, Stefan</author> <title>Creepy Crawlies</title> <genre>Horror</genre> <price>4.95</price> <publish_date>2000-12-06</publish_date> <description>An anthology of horror stories about roaches, centipedes, scorpions and other insects.</description> </book> <book id="bk109"> <author>Kress, Peter</author> <title>Paradox Lost</title> <genre>Science Fiction</genre> <price>6.95</price> <publish_date>2000-11-02</publish_date> <description>After an inadvertant trip through a Heisenberg Uncertainty Device, James Salway discovers the problems of being quantum.</description> </book> <book id="bk110"> <author>O'Brien, Tim</author> <title>Microsoft .NET: The Programming Bible</title> <genre>Computer</genre> <price>36.95</price> <publish_date>2000-12-09</publish_date> <description>Microsoft's .NET initiative is explored in detail in this deep programmer's reference.</description> </book> <book id="bk111"> <author>O'Brien, Tim</author> <title>MSXML3: A Comprehensive Guide</title> <genre>Computer</genre> <price>36.95</price> <publish_date>2000-12-01</publish_date> <description>The Microsoft MSXML3 parser is covered in detail, with attention to XML DOM interfaces, XSLT processing, SAX and more.</description> </book> <book id="bk112"> <author>Galos, Mike</author> <title>Visual Studio 7: A Comprehensive Guide</title> <genre>Computer</genre> <price>49.95</price> <publish_date>2001-04-16</publish_date> <description>Microsoft Visual Studio 7 is explored in depth, looking at how Visual Basic, Visual C++, C#, and ASP+ are integrated into a comprehensive development environment.</description> </book> </catalog>
Now i want to store values alone in arrays,not tags.I know XML::simple,XML::parser module but i dont know exact methodology. Thanks in advance

Comment on Perl XML
Download Code
Replies are listed 'Best First'.
Re: Perl XML
by ramrod (Chaplain) on Aug 13, 2009 at 17:02 UTC
    I use XML::LibXML with great results.
    Try this (untested):
    use XML::LibXML; #Parse XML my $template = 'xmldocument.xml'; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($template); #Find desired node(s) my @nodes= $doc->findnodes("//genre"); #Put results in array my @information; for(@nodes) { my $data = $_->textContent; push (@information,$data); }
    This puts the text from all the "genre" nodes into an array.
Re: Perl XML
by toolic (Bishop) on Aug 13, 2009 at 18:36 UTC
    One good method for parsing XML into Perl arrays is to use XML::Twig handlers. In my opinion, Twig has a better user interface than XML::Parser, and it has an excellent tutorial and documentation. On advantage of Twig over XML::Simple is that it can be used with a larger variety of XML formats.

    Since you did not specify what data you wanted to go into what arrays, I decided to demonstrate how you could stuff all your data into a single Hash-of-Hashes data structure. Here is a snippet:

    my %books; my $twig= new XML::Twig( twig_handlers => { book => \&books } ); $twig->parse($xmlStr); print Dumper(\%books); exit; sub books { my ($twig, $book) = @_; my $id = $book->att('id'); $books{$id}{'author' } = $book->first_child('author' ) +->text(); $books{$id}{'title' } = $book->first_child('title' ) +->text(); $books{$id}{'genre' } = $book->first_child('genre' ) +->text(); $books{$id}{'price' } = $book->first_child('price' ) +->text(); $books{$id}{'publish_date' } = $book->first_child('publish_date') +->text(); }

    Here is the full example:

    Here is the output:

Re: Perl XML
by grantm (Parson) on Aug 14, 2009 at 00:00 UTC
    As the author of XML::Simple, I agree with the recommendation of XML::LibXML. In fact I even wrote this article to show how simple it is to use XML::LibXML :-)
Re: Perl XML
by Jenda (Abbot) on Aug 15, 2009 at 13:20 UTC

    Looks like a perfect opportunity for XML::Rules. See a few of the examples Super Search finds here on PerlMonks.

    Jenda
    Enoch was right!
    Enjoy the last years of Rome.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2015-08-01 02:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (285 votes), past polls