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

Re^2: Basic parsing XML perl - using FOREACH

by Anonymous Monk
on Jan 01, 2016 at 08:52 UTC ( [id://1151658]=note: print w/replies, xml ) Need Help??


in reply to Re: Basic parsing XML perl - using FOREACH
in thread Reaped: Basic parsing XML perl - using FOREACH

See Why shouldn't I delete a node or its content? in How do I change/delete my post?

Originally this is what 1nickt's posted instead of "null"

First, please enclose your code and data inside <code></code> tags. It's almost impossible to read otherwise.

Second, please post working code. You typed in some code that has an error (@xml and $data have their sigils transposed); it makes it hard to help you when you don't paste your actual code here.

Third, you must use strict; and use warnings; in your programs, otherwise you are rejecting Perl's built-in safety features, and there's not much point in helping when a programmer is doing that.

Finally, for your question, XML::Simple maybe "best" for you, but not if you want correct results. It has a lot of limitations (see its own documentation), including in this way: it will only return one element when one or more have the same key:

#!/usr/bin/perl use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml=new XML::Simple; local $/; my @data= $xml->XMLin( <DATA> ); print Dumper(\@data); __DATA__ <?xml version='1.0'?> <staff> <employee> <name>Pradeep</name> <age>23</age> <sex>M</sex> <department>Coder</department> </employee> <employee> <name>Pradeep</name> <age>22</age> <sex>M</sex> <department>HR</department> </employee> </staff>
Output:
$VAR1 = [ { 'employee' => { 'Pradeep' => { 'department' => 'HR', 'age' => '22', 'sex' => 'M' } } } ];
It works fine when the keys are distinct:
#!/usr/bin/perl use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml=new XML::Simple; local $/; my @data= $xml->XMLin( <DATA> ); print Dumper(\@data); __DATA__ <?xml version='1.0'?> <staff> <employee> <name>Pradeep</name> <age>23</age> <sex>M</sex> <department>Coder</department> </employee> <employee> <name>Douglas</name> <age>22</age> <sex>M</sex> <department>HR</department> </employee> </staff>
Output:
$VAR1 = [ { 'employee' => { 'Pradeep' => { 'age' => '23', 'department' => 'Coder', 'sex' => 'M' }, 'Douglas' => { 'age' => '22', 'sex' => 'M', 'department' => 'HR' } } } ];

Many monks recommend using XML::Twig or XML::LibXML instead.


The way forward always starts with a minimal test.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (6)
As of 2024-04-24 09:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found