use strict;
use warnings;
my $str = 'Data < ';
# this code only works if same name tags are never nested
# in your XML-like samples.
$str =~ s/^\s+//;
my $sResult='';
while ($str =~ m{<(\w+)>((?:[^<]|<(?!/\1>))*)\1>\s*}g) {
my $tag = $1;
my $innards = $2;
$innards =~ s/</;
$innards =~ s/>/>/;
$sResult .= "<$tag>$innards$tag>";
}
print STDERR "output: $sResult\n";