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.

In reply to Re^2: Basic parsing XML perl - using FOREACH by Anonymous Monk
in thread Reaped: Basic parsing XML perl - using FOREACH by NodeReaper

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.