XML::ParserはCDATAブロックを完全に処理します。expat
XML :: Parserまたは基盤となるライブラリを更新する必要があるかもしれません。あるいは、問題が他の場所にあるかもしれません。あなたは自分の問題を示さなかったので、わかりにくいです。
use strict;
use warnings;
use feature qw( say );
use Data::Dumper qw( Dumper );
use XML::Parser qw( );
sub f {
local $Data::Dumper::Indent = 0;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Useqq = 1;
return Dumper($_[0]);
}
my $parser = XML::Parser->new(
Handlers => {
Start => sub { say "Start of $_[1]"; },
End => sub { say "End of $_[1]"; },
Char => sub { say "Char: " . f($_[1]); },
},
);
$parser->parse(<<'__EOI__');
<root>
<![CDATA[
<html>
<foo>test > test</foo><br>
</html>
]]>
</root>
__EOI__
Start of root
Char: "\n"
Char: "\n"
Char: " <html>"
Char: "\n"
Char: " <foo>test > test</foo><br>"
Char: "\n"
Char: " </html>"
Char: "\n"
Char: "\n"
End of root