You need to use the { elt => attribute } form of keyattr.
From the docs:
keyattr => { list } (in+out) (IMPORTANT!)
This alternative (and preferred) method of specifiying the key attributes allows more fine grained control over which elements are folded and on which attributes. For example the option keyattr => { package => 'id' } will cause any package elements to be folded on the 'id' attribute. No other elements which have an 'id' attribute will be folded at all.
So here is the code you want:
#!/usr/bin/perl -w use strict; use XML::Simple; undef $/; my $ref = XMLin( <DATA>, forcearray => 1, keyattr => { wrapper => "nam +e" }); my $wrapName = "testName 1.0.3"; print "$ref->{wrapper}->{$wrapName}->{script}\n"; print "$ref->{wrapper}->{$wrapName}->{envVar}->[0]->{value}\n"; __DATA__ <config> <wrapper name="testName 1.0.3" script="/usr/people/ltorvalds/apps/ +wrapper.pl" app="testApp.exe"> <envVar name="TMPDIR" value="/usr/tmp"/> <envVar name="APPDIR" value="/usr/bin"/> </wrapper> </config>
In reply to Re: How do I correctly use arrays with XML::Simple?
by mirod
in thread How do I correctly use arrays with XML::Simple?
by ccarden
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |