"""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 at
http://www.megginson.com/SAX/. The Python version of the interface is
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
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 InputSource
from handler
import ContentHandler
, ErrorHandler
from _exceptions
import SAXException
, SAXNotRecognizedException
, \
SAXParseException
, SAXNotSupportedException
, \
def parse(source
, handler
, errorHandler
=ErrorHandler()):
parser
.setContentHandler(handler
)
parser
.setErrorHandler(errorHandler
)
def parseString(string
, handler
, errorHandler
=ErrorHandler()):
from cStringIO
import StringIO
from StringIO
import StringIO
errorHandler
= ErrorHandler()
parser
.setContentHandler(handler
)
parser
.setErrorHandler(errorHandler
)
inpsrc
.setByteStream(StringIO(string
))
# 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
import xml
.sax
.expatreader
if os
.environ
.has_key("PY_SAX_PARSER"):
default_parser_list
= os
.environ
["PY_SAX_PARSER"].split(",")
_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
:
return _create_parser(parser_name
)
if sys
.modules
.has_key(parser_name
):
# The parser module was found, but importing it
# failed unexpectedly, pass this exception through
except SAXReaderNotAvailable
:
# The parser module detected that it won't work properly,
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()
def _create_parser(parser_name
):
drv_module
= __import__(parser_name
,{},{},['create_parser'])
return drv_module
.create_parser()