I've been using XML::Simple for some very simple XML and until yesterday it was working the way I expected... till I got bitten with the following example:
use XML::Simple; use Data::Dumper; my $x =<<EOF; <stuff name="me"> <obj class="myclass"> <set name="key1">a</set> <set name="key2"></set> </obj> <obj class="myclass"> <set name="key1">a</set> <set name="key2">b</set> </obj> </stuff> EOF $x = XMLin( $x, #SuppressEmpty => '', ForceArray => 1, ContentKey => '-content', ); print Dumper(\$x); $VAR1 = \{ 'obj' => [ { 'class' => 'myclass', 'set' => { 'key2' => {}, 'key1' => { 'content' => 'a' } } }, { 'class' => 'myclass', 'set' => { 'key2' => 'b', 'key1' => 'a' } } ], 'name' => 'me' };
Here I've provided two 'objects', one object has an element that has an empty or value is blank. As a result the hash that's returned is formatted differently than when _all_ attributes are provided. What I expected was the latter like:
'key2' => 'b', 'key1' => 'a'
but where there is an 'empty' attribute everything changes to a hash (and with the 'content' sub-element). That's what I thought the ForceArray and ContentKey was supposed to suppress; and the ContentKey does do it!... but only when all fields are populated.
I thought SuppressEmpty would do it, but it doesn't.
What am I missing?
In reply to XML::Simple isn't listening to SuppressEmpty by fhew
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |