aha!!
use strict;
use warnings;
use XML::LibXML qw( );
my $parser = XML::LibXML->new();
$parser->keep_blanks(0);
print $parser->parse_fh(*DATA)->toString(@ARGV ? $ARGV[0] : 1);
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sites>
<site>
<sitename><![CDATA[www.example.com]]></sitename>
<active><![CDATA[1]]></active>
<rooturl><![CDATA[http://www.example.com.com/]]></rooturl>
<name><![CDATA[Example]]></name>
</site>
<site><sitename>Test entry</sitename><name></name><rooturl><![CDATA[
+http://www.test.com.com/]]></rooturl><reportname><![CDATA[tes$
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sites>
<site>
<sitename><![CDATA[www.example.com]]></sitename>
<active><![CDATA[1]]></active>
<rooturl><![CDATA[http://www.example.com.com/]]></rooturl>
<name><![CDATA[Example]]></name>
</site>
<site>
<sitename>Test entry</sitename>
<name/>
<rooturl><![CDATA[http://www.test.com.com/]]></rooturl>
<reportname><![CDATA[test report name]]></reportname>
</site>
</sites>
</config>