108 lines · 3.5 KB · Python
RawDownload
"""Simple API for XML (SAX) implementation for Python. This module provides an implementation of the SAX 2 interface;information about the Java version of the interface can be found athttp://www.megginson.com/SAX/.  The Python version of the interface isdocumented at <...>. This package contains the following modules: handler -- Base classes and constants which define the SAX 2 API for           the 'client-side' of SAX for Python. saxutils -- Implementation of the convenience classes commonly used to            work with SAX. xmlreader -- Base classes and constants which define the SAX 2 API for             the parsers used with SAX for Python. expatreader -- Driver that allows use of the Expat parser with SAX.""" from xmlreader import InputSourcefrom handler import ContentHandler, ErrorHandlerfrom _exceptions import SAXException, SAXNotRecognizedException, \                        SAXParseException, SAXNotSupportedException, \                        SAXReaderNotAvailable  def parse(source, handler, errorHandler=ErrorHandler()):    parser = make_parser()    parser.setContentHandler(handler)    parser.setErrorHandler(errorHandler)    parser.parse(source) def parseString(string, handler, errorHandler=ErrorHandler()):    try:        from cStringIO import StringIO    except ImportError:        from StringIO import StringIO     if errorHandler is None:        errorHandler = ErrorHandler()    parser = make_parser()    parser.setContentHandler(handler)    parser.setErrorHandler(errorHandler)     inpsrc = InputSource()    inpsrc.setByteStream(StringIO(string))    parser.parse(inpsrc) # this is the parser list used by the make_parser function if no# alternatives are given as parameters to the function default_parser_list = ["xml.sax.expatreader"] # tell modulefinder that importing sax potentially imports expatreader_false = 0if _false:    import xml.sax.expatreader import os, sysif os.environ.has_key("PY_SAX_PARSER"):    default_parser_list = os.environ["PY_SAX_PARSER"].split(",")del os _key = "python.xml.sax.parser"if sys.platform[:4] == "java" and sys.registry.containsKey(_key):    default_parser_list = sys.registry.getProperty(_key).split(",")  def make_parser(parser_list = []):    """Creates and returns a SAX parser.     Creates the first parser it is able to instantiate of the ones    given in the list created by doing parser_list +    default_parser_list.  The lists must contain the names of Python    modules containing both a SAX parser and a create_parser function."""     for parser_name in parser_list + default_parser_list:        try:            return _create_parser(parser_name)        except ImportError,e:            import sys            if sys.modules.has_key(parser_name):                # The parser module was found, but importing it                # failed unexpectedly, pass this exception through                raise        except SAXReaderNotAvailable:            # The parser module detected that it won't work properly,            # so try the next one            pass     raise SAXReaderNotAvailable("No parsers found", None) # --- Internal utility methods used by make_parser if sys.platform[ : 4] == "java":    def _create_parser(parser_name):        from org.python.core import imp        drv_module = imp.importName(parser_name, 0, globals())        return drv_module.create_parser() else:    def _create_parser(parser_name):        drv_module = __import__(parser_name,{},{},['create_parser'])        return drv_module.create_parser() del sys