[tpm] XML::Simple ignores SupressEmpty

Fulko Hew fulko.hew at gmail.com
Wed May 2 08:01:09 PDT 2012

(Note that I've also posted this to PerlMonks.)

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

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 class="myclass">
       <set name="key1">a</set>
       <set name="key2">b</set>

$x = XMLin(
   #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?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/toronto-pm/attachments/20120502/c4a1fa35/attachment.html>

More information about the toronto-pm mailing list