Set the KeyAttr option for <nonterminal> to the empty list.
See XML::Simple for further details.
Update: quick explanation for my rather terse answer... when elements are repeated, XML::Simple puts them into either a hash or an array. It chooses a hash if it can find an attribute to use as the hash key. By default the attributes id, key and name are used. Perl hashes don't preserve order; Perl arrays do. By setting the key attribute list to the empty list, you force XML::Simple to use arrays.
That having all been said, in my experience for any even vaguely complex tasks, XML::Simple's "simplicity" actually ends up making things much harder. Witness the XML::LibXML solution...
use 5.010; use XML::LibXML 1.94; use PerlX::MethodCallWithBlock; XML::LibXML:: -> load_xml(location => 'myfile.xml') -> findnodes("//nonterminal | //token") -> map { $_->{name} || $_->textContent } -> foreach { say }
In reply to Re: XML::Simple How to print data in its original position
by tobyink
in thread XML::Simple How to print data in its original position
by Z_S
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |