I have an XML file to be parsed using XML::Twig. I am getting the following error when I use twig_roots. "Odd number of elements in anonymous hash at line 29.
The code partially does what I need without the root handler line.
This is what I have done so far. There are many things wrong with my code. The XML code is just a snippet of another similar XML file. The actual XML file I have to parse is very big and would be impossible to call out the children of 'Misc' by their names.
1) Does not work with twig_roots. I am basically looking to display only the elements under Misc.The twig root element is input by the user.
2) With Twig_roots, all my data is printed in one line instead of 6 ( 2 for each Actor). Or even 3 with each actors info in one line
3) I am not sure how to display my header elements just once. I am just printing it in two different files now.
Code and XML below!
use strict; use warnings; use XML::Twig; my $start = time; my $flag = 0; open my $fout1, '>', "XMLTest1.csv"; open my $fout2, '>', "XMLTest2.csv"; my $twig = XML::Twig - > new( twig_roots => { 'Misc' => 1, 'Profession' =>1,'Actor' =>1,'Age' =>1 }, twig_handlers => { 'Database' => sub { my($twig, $el) = @_; $twig - > purge; }, 'Database//*' => sub { print $fout2 $_ - > tag, ",", unless(($_ - > has_children( +'#ELT')) || ($flag = 1)); print $fout1 $_ - > text, ",", unless($_ - > has_children( +'#ELT')); $flag = 1; } } ); $twig - > parsefile('Actors.xml'); my $duration = time - $start; print "Execution time: $duration s\n";
My XML file is shown here. I am basically trying to display my data as
|Profession|Actor |Age|Music|TV|Music|TV| |Actor |Ben Affleck|43 |none|Pearl Harbor|none|2001| |Actor |Ben Affleck|43 |Jenny from the block|Wood Will Hunting|200 +2|1997| . . . . |Actor |Leonardo DiCaprio|41|None|Saturday Night Live|None|2014|
<?xml version="1.0" encoding="UTF-8"?> -<Database> <Profession>Actors</Profession> -<Work> -<elt> <Actor>Ben Affleck</Actor> <Age>43</Age> <Place>USA</Place> <Junk/> -<Personal> <Spouse>Jennifer Garner</Spouse> <Kids>Seraphina Rose</Kids> </Personal> -<Movies> -<Comedy> <Movie1>Chasing Amy</Movie1> <Movie2>Gigli</Movie2> <Movie3>Dogma</Movie3> </Comedy> -<Fantasy> <Movie1>Field of dreams</Movie1> <Movie2>None</Movie2> </Fantasy> -<Romance> <Movie1>Shakespeare in Love</Movie1> <Movie2>None</Movie2> </Romance> -<Misc> -<elt> <Music>none</Music> <TV>Pearl Harbor</TV> -<Year> <Music>none</Music> <TV>2001</TV> </Year> </elt> -<elt> <Music>Jenny from the block</Music> <TV>Good Will Hunting</TV> -<Year> <Music>2002</Music> <TV>1997</TV> </Year> </elt> </Misc> </Movies> </elt> -<elt> <Actor>Johnny Depp</Actor> <Age>52</Age> <Place>USA</Place> <Junk/> -<Personal> <Spouse>Amber Heard</Spouse> <Kids>Lilly Rose</Kids> </Personal> -<Movies> -<Comedy> <Movie1>Mortdecai</Movie1> <Movie2>Rango</Movie2> <Movie3>What's eating gilbert grape</Movie3> </Comedy> -<Fantasy> <Movie1>Edward Scissorhands</Movie1> <Movie2>Alice in Wonderland</Movie2> </Fantasy> -<Romance> <Movie1>Chocolat</Movie1> <Movie2>None</Movie2> </Romance> -<Misc> -<elt> <Music>The Snake</Music> <TV>The Run Diary</TV> -<Year> <Music>1994</Music> <TV>2011</TV> </Year> </elt> -<elt> <Music>Be Here Now</Music> <TV>21 Jump Street</TV> -<Year> <Music>1997</Music> <TV>1987</TV> </Year> </elt> </Misc> </Movies> </elt> -<elt> <Actor>Leonardo DiCaprio</Actor> <Age>41</Age> <Place>USA</Place> <Junk/> -<Personal> <Spouse>None</Spouse> <Kids>None</Kids> </Personal> -<Movies> -<Comedy> <Movie1>The Wolf of Wall Street</Movie1> <Movie2>What's Eating Gilbert Grape</Movie2> <Movie3>Don's Plum</Movie3> </Comedy> -<Fantasy> <Movie1>Inception</Movie1> <Movie2>None</Movie2> </Fantasy> -<Romance> <Movie1>Titanic</Movie1> <Movie2>Romeo+Juliet</Movie2> </Romance> -<Misc> -<elt> <Music>None</Music> <TV>Shutter Island</TV> -<Year> <Music>None</Music> <TV>2011</TV> </Year> </elt> -<elt> <Music>None</Music> <TV>Saturday Night Live</TV> -<Year> <Music>None</Music> <TV>2014</TV> </Year> </elt> </Misc> </Movies> </elt> </Work> </Database>
Would appreciate any help with this. Thank you Monks!
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |