[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