First off, the XML::Checker version 0.13 documentation is wrong. Its example implies an array ref should be used with 'Handlers', but it needs a hash.
Second, XML::Checker does not find your DTD palatable. It gets upset by the ! following the c in <!ELEMENT a (b,c!)>.
With those two issues cleaned up:
use strict; use warnings; use XML::Checker::Parser; my %expat_options = ( KeepCDATA => 1, Handlers => {Unparsed => \&my_Unparsed_handler} ); my $parser = new XML::Checker::Parser(%expat_options); open OUT, '>', 'fail.xml'; print OUT <<OUT; <!DOCTYPE a [ <!ELEMENT a (b,c)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)> ]> <a> "something should not be here" <b></b> <c></c> </a> OUT close OUT; eval { local $XML::Checker::FAIL = \&my_fail; $parser->parsefile("fail.xml"); }; if ($@) { print $@; } else { print "xml has been validated"; } sub my_fail { my $code = shift; die XML::Checker::error_string( $code, @_ ) if $code < 200; XML::Checker::print_error( $code, @_ ); }
Prints:
XML::Checker ERROR-149: Element should only contain sub elements, foun +d text ["something should not be here"] Context: line 7, column 0, byte 104
In reply to Re: Problem using XML::Checker::Parser
by GrandFather
in thread Problem using XML::Checker::Parser
by squareroot3
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |