in reply to Re^2: XML::Simple bug? aka I want the whitespace dude!
in thread XML::Simple bug? aka I want the whitespace dude!

would it hurt anything to preserve the whitespace in case of tags with no children?

This is going to sound rude and uncaring (which is unfortunate because I try not to be either) but ... Yes, it would hurt.

You're talking about changing the default behaviour. In a module that's been around as long as this one has then that is certain to break a lot of scripts. Just by way of example, it broke 21 tests in the test suite that ships with the module. It also introduced almost 2000 warning messages during make test.

Now obviously it would be possible to clean up the warnings and add another option so the default behaviour was not affected, but that's not really going to fly either. XML::Simple already has far too many options. The claim to the name 'Simple' was lost years ago. I regularly reject requests to add 'one simple option' because I don't want to make matters worse.

The reality is that XML::LibXML is a powerful and flexible module that can do what you want. You might want to put your own thin wrapper around it to simplify the things that you want to do regularly. In the end though, it will be a better solution because it will work the way you expect it to work and it won't bogged down with options to make it work in the weird and wonderful ways other people expect.

Sorry if I sound grumpy.

  • Comment on Re^3: XML::Simple bug? aka I want the whitespace dude!

Replies are listed 'Best First'.
Re^4: XML::Simple bug? aka I want the whitespace dude!
by Jenda (Abbot) on Aug 25, 2005 at 15:08 UTC

    Thanks for your comments. I should have tried the tests, sorry. If by the 2000 warning messages you mean

    Use of uninitialized value in concatenation (.) or string at D:/Perl/s +ite/lib/XML/SAX/Expat.pm line 198.
    then I do get those with the original version as well! XML::SAX::Expat ver. 0.35.

    In this case I don't think there is a need for a new option, at most new values for NormaliseSpace. Let's say -1 = keep the whitespace if there are no subtags and -2 = keep all whitespace.

    #against original version line 925 << next if($val =~ m{^\s*$}s); # Skip all whitespace content >> next if ($self->{opt}->{normalisespace} >= 0 and $val =~ m{^\s +*$}s); # Skip all whitespace content line 992 >> if ($self->{opt}->{normalisespace} == -1 and ref($attr->{$self->{o +pt}->{contentkey}}) eq 'ARRAY' >> and !grep( !m{^\s*$}s, @{$attr->{$self->{opt}->{contentkey}}})) { >> delete $attr->{$self->{opt}->{contentkey}}; >> }
    All tests pass this time.

    It would be great if this patch was accepted, otherwise I'll just have to use the tweaked XML::Simple as the "thin wrapper", instead of wasting time writing my own :-)

    Jenda
    XML sucks. Badly. SOAP on the other hand is the most powerfull vacuum pump ever invented.