1 """Simple API for XML (SAX) implementation for Python.
3 This module provides an implementation of the SAX 2 interface;
4 information about the Java version of the interface can be found at
5 http://www.megginson.com/SAX/. The Python version of the interface is
8 This package contains the following modules:
10 handler -- Base classes and constants which define the SAX 2 API for
11 the 'client-side' of SAX for Python.
13 saxutils -- Implementation of the convenience classes commonly used to
16 xmlreader -- Base classes and constants which define the SAX 2 API for
17 the parsers used with SAX for Python.
19 expatreader -- Driver that allows use of the Expat parser with SAX.
22 from xmlreader
import InputSource
23 from handler
import ContentHandler
, ErrorHandler
24 from _exceptions
import SAXException
, SAXNotRecognizedException
, \
25 SAXParseException
, SAXNotSupportedException
, \
29 def parse(source
, handler
, errorHandler
=ErrorHandler()):
30 parser
= make_parser()
31 parser
.setContentHandler(handler
)
32 parser
.setErrorHandler(errorHandler
)
35 def parseString(string
, handler
, errorHandler
=ErrorHandler()):
37 from cStringIO
import StringIO
39 from StringIO
import StringIO
41 if errorHandler
is None:
42 errorHandler
= ErrorHandler()
43 parser
= make_parser()
44 parser
.setContentHandler(handler
)
45 parser
.setErrorHandler(errorHandler
)
47 inpsrc
= InputSource()
48 inpsrc
.setByteStream(StringIO(string
))
51 # this is the parser list used by the make_parser function if no
52 # alternatives are given as parameters to the function
54 default_parser_list
= ["xml.sax.expatreader"]
56 # tell modulefinder that importing sax potentially imports expatreader
59 import xml
.sax
.expatreader
62 if "PY_SAX_PARSER" in os
.environ
:
63 default_parser_list
= os
.environ
["PY_SAX_PARSER"].split(",")
66 _key
= "python.xml.sax.parser"
67 if sys
.platform
[:4] == "java" and sys
.registry
.containsKey(_key
):
68 default_parser_list
= sys
.registry
.getProperty(_key
).split(",")
71 def make_parser(parser_list
= []):
72 """Creates and returns a SAX parser.
74 Creates the first parser it is able to instantiate of the ones
75 given in the list created by doing parser_list +
76 default_parser_list. The lists must contain the names of Python
77 modules containing both a SAX parser and a create_parser function."""
79 for parser_name
in parser_list
+ default_parser_list
:
81 return _create_parser(parser_name
)
84 if parser_name
in sys
.modules
:
85 # The parser module was found, but importing it
86 # failed unexpectedly, pass this exception through
88 except SAXReaderNotAvailable
:
89 # The parser module detected that it won't work properly,
93 raise SAXReaderNotAvailable("No parsers found", None)
95 # --- Internal utility methods used by make_parser
97 if sys
.platform
[ : 4] == "java":
98 def _create_parser(parser_name
):
99 from org
.python
.core
import imp
100 drv_module
= imp
.importName(parser_name
, 0, globals())
101 return drv_module
.create_parser()
104 def _create_parser(parser_name
):
105 drv_module
= __import__(parser_name
,{},{},['create_parser'])
106 return drv_module
.create_parser()