You can use XML::Rules and specify what tags do you want to keep as text. Something like this:
use strict;
use XML::Rules;
use Data::Dumper;
my $parser = XML::Rules->new(
stripspaces => 2,
rules => {
'_default' => 'as array',
'Publisher' => 'pass',
'Emphasis' => sub {
my ($tag,$attr,$parser) = @_[0,1,4];
return $parser->ToXML($tag, $attr);
}
}
);
print Dumper($parser->parse(\*DATA));
__DATA__
<Publisher>
<UniqueDOI>978-3-642-123456</UniqueDOI>
<ChapterInfo ChapterType="OriginalPaper">
<Title Language="En">Is Light Blue (<Emphasis Type="Italic">azzurr
+o</Emphasis> o bianco) Color Name Universal in the Italian Language?<
+/Title>
</ChapterInfo>
</Publisher>
You can specify a comma separated list of tags in place of the 'Emphasis' and if some other tags are not allowed to repeat, you may include 'their,names' => 'as is' in the rules hash.
Jenda
Enoch was right!
Enjoy the last years of Rome.