In you care about the order of those elements XML::Simple (or indeed any similar XML-to-hashref tool) is not your friend. Perl hashes do not preserve order. There are modules that give you order-preserving hashes (via ties) but persuading XML::Simple to use them is probably not possible.
use PerlX::MethodCallWithBlock; use Text::CSV; use XML::LibXML 1.94; local $\ = "\n"; my $xml = XML::LibXML->load_xml(IO => \*DATA); my $csv = Text::CSV->new; foreach my $book ($xml->findnodes('/library/book')) { my $row = $book->findnodes('./*')->map{ $_->textContent }; $csv->print(\*STDOUT, $row); } __DATA__ <library> <book> <author>Book 1 author 1</author> <author>Book 1 author 2</author> <title>Book 1 title</title> <isbn>Book1ISBN</isbn> </book> <book> <author>Book 2 author 1</author> <author>Book 2 author 2</author> <title>Book 2 title</title> <isbn>Book2ISBN</isbn> </book> </library>
The output from the above is:
"Book 1 author 1","Book 1 author 2","Book 1 title",Book1ISBN "Book 2 author 1","Book 2 author 2","Book 2 title",Book2ISBN
In reply to Re: How to use perl to parsing a XML file to csv file which have the same sequence in xml file?
by tobyink
in thread How to use perl to parsing a XML file to csv file which have the same sequence in xml file?
by carol.j
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |