class XElementParser: def __init__(self, outer_env={}, parser=None): """ To use the validating parser: parser = sax.make_parser(['Ft.Xml.Sax']) parser.setFeature(sax.handler.feature_validation, True) from Ft.Xml import CreateInputSource self.parser.parse(CreateInputSource(document_uri)) #self.parser.parse(xml.sax.saxutils.prepare_input_source(document_uri)) """ if parser == None: self.parser = xml.sax.make_parser() elif type(parser) == type(""): self.parser = xml.sax.make_parser([parser]) else: self.parser = parser.make_parser() self.parser_error_handler = ErrorPrinter() self.parser.setErrorHandler(self.parser_error_handler) self.xth = XTreeHandler( IgnoreWhiteSpace="yes", RemoveWhiteSpace="yes", CreateElementMap="yes", RequireUserClasses="no" ) for x in outer_env.keys(): if type(outer_env[x]) == types.ClassType: self.xth.registerElementClass(outer_env[x]) self.parser.setContentHandler(self.xth) def process(self, document_uri): Ok = None try: self.parser_error_handler.reset() # self.parser.parse(document_uri) self.parser.parse(xml.sax.saxutils.prepare_input_source(document_uri)) if self.parser_error_handler.has_errors(): raise "validation failed" return self.xth.getDocument().getChild() except IOError, e: print "\nI/O Error: " + document_uri + ": " + str(e) except SAXException, e: print "\nParse Error: " + document_uri + ": " + str(e)