in reply to XML::Simple isn't listening to SuppressEmpty
XML::Simple can't do what you want there. The SuppressEmpty option is almost what you want except it won't apply in your case because the element will contain name => 'set' and won't be considered empty. Later on, the array folding will cause that attribute to be deleted but by that stage it's too late for the SuppressEmpty check.
The issue is that as soon as you start supporting multiple options, the order in which those options are applied begins to matter.
I'd just use XML::LibXML.