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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Problem using XML::Checker::Parser
by squareroot3 (Initiate) on Aug 08, 2007 at 16:07 UTC | |
| A reply falls below the community's threshold of quality. You may see it by logging in. |