[XML-SIG] handle drv_xmlproc_val SAXParseExceptions
Remy C. Cool
dev-xml@smartology.nl
Thu, 5 Dec 2002 17:49:42 +0100
Hello,
I've used the basic non-validating parser often, but I now need a
validating parser ... so tried it with xmlproc. Problem is that I
can't catch SAXParseExceptions with the error() or fatalError()
handlers.
the code:
from xml.sax.saxlib import HandlerBase, DocumentHandler,
ErrorHandler, DTDHandler
class xpdf_parser(DocumentHandler):
def warning(self, exception):
# warning ... record
self.warning.append(exception)
print exception
def error(self, exception):
# non fatal error ... record (parsing probably stops)
self.error.append(exception)
print exception
def fatalError(self, exception):
# fatal error ... parsing stops
self.error.append(exception)
print exception
return
...
----
if __name__ == '__main__':
from xml.sax import make_parser
from xml.sax.handler import feature_namespaces
# create a parser
parser = make_parser('xml.sax.drivers.drv_xmlproc_val')
# create the handler
pdf = xpdf_parser()
# tell the parser to use our handler
parser.setDocumentHandler(pdf)
parser.setErrorHandler(pdf)
parser.setDTDHandler(pdf)
# Parse the input
parser.parse(xpdf_file)
As a result I get the following error:
xpdf.xml:2:34: Not a valid name
xpdf.xml:2:34: Whitespace expected here
xpdf.xml:2:34: Expected type or alternative list
Traceback (most recent call last):
File "./xpdf.py", line 251, in ?
produce_pdf = main(basedir.xpdf + xpdf_file)
File "./xpdf.py", line 244, in __init__
parser.parse(xpdf_file)
File
"/usr/lib/python2.1/site-packages/_xmlplus/sax/drivers/drv_xmlproc.py",
line 31, in parse
self.parser.parse_resource(sysID)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlval.py",
line 31, in parse_resource
self.parser.parse_resource(sysid)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 127, in parse_resource
self.read_from(infile,bufsize)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 200, in read_from
self.feed(buf)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 329, in feed
self.do_parse()
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlproc.py",
line 101, in do_parse
self.parse_doctype()
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlproc.py",
line 509, in parse_doctype
sys_id))
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 129, in parse_resource
self.close()
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 334, in close
self.parseEnd()
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/dtdparser.py",
line 217, in parseEnd
self.dtd_consumer.dtd_end()
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmldtd.py",
line 212, in dtd_end
self.parser.report_error(1006,elem)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlproc.py",
line 63, in report_error
EntityParser.report_error(self,number,args)
File
"/usr/lib/python2.1/site-packages/_xmlplus/parsers/xmlproc/xmlutils.py",
line 517, in report_error
self.err.warning(msg)
File
"/usr/lib/python2.1/site-packages/_xmlplus/sax/drivers/drv_xmlproc.py",
line 90, in warning
self.err_handler.warning(saxlib.SAXParseException(msg,None,self))
TypeError: object of type 'list' is not callable
The validation part obviously works (xpdf.xml:2:34: Not a valid name
etc.), but I would like to be able to handle the Exception myself
i.s.o. halting the program.
I've not been able to find the solution to this answer ... anyone ?
Kind Regards,
Remy Cool