Beispiel #1
0
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)
Beispiel #2
0
    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)