in reply to Problem using XML::Checker::Parser

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

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: Problem using XML::Checker::Parser
by squareroot3 (Initiate) on Aug 08, 2007 at 16:07 UTC
    1st thank u. I have tested it, but the code is not working for me.
    do u know any setting could cause that problem?
A reply falls below the community's threshold of quality. You may see it by logging in.