NAME
XML::DOM::ValParser - an XML::DOM::Parser that validates at parse time
SYNOPSIS
use
XML::DOM::ValParser;
my
%expat_options
= (
KeepCDATA
=> 1,
Handlers
=> [
Unparsed
=> \
&my_Unparsed_handler
]);
my
$parser
= new XML::DOM::ValParser (
%expat_options
);
eval
{
local
$XML::Checker::FAIL
= \
&my_fail
;
my
$doc
=
$parser
->parsefile (
"fail.xml"
);
... XML::DOM::Document was created sucessfully ...
};
if
($@) {
# Either XML::Parser (expat) threw an exception or my_fail() died.
... your error handling code here ...
# Note that the XML::DOM::Document is automatically disposed off and
# will be garbage collected
}
# Throws an exception (with die) when an error is encountered, this
# will stop the parsing process.
# Don't die if a warning or info message is encountered, just print a message.
sub
my_fail {
my
$code
=
shift
;
die
XML::Checker::error_string (
$code
,
@_
)
if
$code
< 200;
XML::Checker::print_error (
$code
,
@_
);
}
DESCRIPTION
Use XML::DOM::ValParser wherever you would use XML::DOM::Parser and your XML will be checked using XML::Checker at parse time.
See XML::DOM for details on XML::DOM::Parser options. See XML::Checker for details on setting the fail handler (my_fail.)
The following handlers are currently supported, just like XML::DOM::Parser: Init, Final, Char, Start, End, Default, Doctype, CdataStart, CdataEnd, XMLDecl, Entity, Notation, Proc, Default, Comment, Attlist, Element, Unparsed.
XML::DOM::ValParser
XML::DOM::ValParser extends from XML::Checker::Parser. It creates an XML::Checker object and routes all event handlers through the checker, before processing the events to create the XML::DOM::Document.
Just like XML::Checker::Parser, the checker object can be retrieved with the getChecker() method and can be reused later on (provided that the DOCTYPE section of the XML::DOM::Document did not change in the mean time.)
You can control which errors are fatal (and therefore should stop creation of the XML::DOM::Document) by filtering the appropriate error codes in the global $XML::Checker::FAIL handler (see "ERROR_HANDLING" in XML::Checker) and calling die or croak appropriately.
Just like XML::Checker::Parser, XML::DOM::ValParser supports the SkipExternalDTD and SkipInsignifWS options. See XML::Checker::Parser for details.
AUTHOR
Send bug reports, hints, tips, suggestions to Enno Derksen at <enno@att.com>.