XML-Liberal

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

t/bad/BAD-chr-28.xml
t/bad/BAD-chr-29.xml
t/bad/BAD-chr-3.xml
t/bad/BAD-chr-30.xml
t/bad/BAD-chr-31.xml
t/bad/BAD-chr-4.xml
t/bad/BAD-chr-5.xml
t/bad/BAD-chr-6.xml
t/bad/BAD-chr-7.xml
t/bad/BAD-chr-8.xml
t/bad/BAD-control-cdata.xml
t/bad/BAD-control.xml
t/bad/BAD-declaration.xml
t/bad/BAD-html.xml
t/bad/BAD-html2.xml
t/bad/BAD-html3.xml
t/bad/BAD-lowascii.xml
t/bad/BAD-nested-cdata.xml
t/bad/BAD-trailing-both.xml
t/bad/BAD-trailing-doctype.xml
t/bad/BAD-trailing-elements.xml
t/bad/BAD-unclosed.xml
t/bad/BAD-undeclared-ns-element.xml
t/bad/BAD-undeclared-ns.xml
t/bad/BAD-unquoted-nbsp.xml
t/bad/BAD-unquoted.xml
t/bad/BAD-xhtml-empty-element-tag.xml
t/bad/BAD-xhtml-empty-element-tag2.xml

MANIFEST  view on Meta::CPAN

t/good/GOOD-chr-28.xml
t/good/GOOD-chr-29.xml
t/good/GOOD-chr-3.xml
t/good/GOOD-chr-30.xml
t/good/GOOD-chr-31.xml
t/good/GOOD-chr-4.xml
t/good/GOOD-chr-5.xml
t/good/GOOD-chr-6.xml
t/good/GOOD-chr-7.xml
t/good/GOOD-chr-8.xml
t/good/GOOD-control-cdata.xml
t/good/GOOD-control.xml
t/good/GOOD-declaration.xml
t/good/GOOD-html.xml
t/good/GOOD-html2.xml
t/good/GOOD-html3.xml
t/good/GOOD-lowascii.xml
t/good/GOOD-nested-cdata.xml
t/good/GOOD-trailing-both.xml
t/good/GOOD-trailing-doctype.xml
t/good/GOOD-trailing-elements.xml
t/good/GOOD-unclosed.xml
t/good/GOOD-undeclared-ns-element.xml
t/good/GOOD-undeclared-ns.xml
t/good/GOOD-unquoted-nbsp.xml
t/good/GOOD-unquoted.xml
t/good/GOOD-xhtml-empty-element-tag.xml
t/good/GOOD-xhtml-empty-element-tag2.xml

lib/XML/Liberal/Remedy/NestedCDATA.pm  view on Meta::CPAN


use HTML::Entities qw( encode_entities );

sub apply {
    my $class = shift;
    my($driver, $error, $xml_ref) = @_;

    return 0 if $error->message !~ /^parser error : Opening and ending tag mismatch:/;

    while ($$xml_ref =~ /(?<= <!\[CDATA\[ ) (.*? \]\]> )/xmsg) {
        my ($cdata, $start, $end) = ($1, $-[1], $+[1]);
        next if $cdata !~ /<!\[CDATA\[/;
        my $escaped = encode_entities($cdata, '<>&');
        substr($$xml_ref, $start, $end - $start) = "]]>$escaped<![CDATA[";
        return 1;
    }

    return 0;
}

1;



( run in 0.232 second using v1.01-cache-2.11-cpan-454fe037f31 )