Streuner Streuner - 6 months ago 38
Perl Question

Perl XML::Simple: SuppressEmpty for xsi:nil-Elements without content?

I'm struggling with XML::Simple in Perl and nullable Elements.

So this is my example-XML:

<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>


If I read this with XMLin and SuppressEmpty => 1 I'll get an empty string for the EmptyOne, but a Hash with xsi:nil="true" for the NullableElement. My questions is, how can I tell the XMLin to ignore the xsi:nil-Content and just give me an empty string or undef? Is this even possible with XML::Simple or should I switch to Lib::XML?

Here some code to see the result:

use XML::Simple;
use Data::Dumper;

my $xmlIn = '<MyXml><SomeNumber>123</SomeNumber><EmptyOne/><NullableElement xsi:nil="true"></NullableElement></MyXml>';
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');

print Dumper($xmlHash);

Answer

Well I found a solution for my problem by myself, but this only works for my specific case, because I don't have any attributes I need. If so, you can change the line

my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');

to

my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');

This will cut off all the attributes and return an empty string like a regular empty Element.

As mentioned before, this will only work if you don't need any attributes from the xml. If you do need them, this won't work.

Comments