1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
"""
SAX driver for xmllib.py
"""
version="0.91"
from xml.sax import saxutils
from xml.sax.drivers import pylibs
# from xml.parsers import xmllib2
# xmllib=xmllib2
import xmllib
# Make it generate Unicode if possible, UTF-8 else
try:
unicode("")
except NameError:
from xml.unicode.iso8859 import wstring
def unicode(str, encoding):
return wstring.decode(encoding, str).utf8()
# --- SAX_XLParser
class SAX_XLParser(pylibs.LibParser,xmllib.XMLParser):
"SAX driver for xmllib.py."
def __init__(self):
xmllib.XMLParser.__init__(self)
pylibs.LibParser.__init__(self)
self.standalone=0
self.reset()
def _convert(self, str):
return unicode(str, self.encoding)
def unknown_starttag(self,tag,attributes):
tag = unicode(tag, self.encoding)
newattr = {}
for k,v in attributes.items():
newattr[unicode(k,self.encoding)] = unicode(v,self.encoding)
self.doc_handler.startElement(tag,saxutils.AttributeMap(newattr))
def handle_endtag(self,tag,method):
self.doc_handler.endElement(unicode(tag, self.encoding))
def handle_proc(self,name,data):
self.doc_handler.processingInstruction(name,data[1:])
def handle_xml(self, encoding, standalone):
self.standalone= standalone=="yes"
if encoding is not None:
self.encoding = encoding
def handle_data(self,data):
"Handles PCDATA."
data = unicode(data, self.encoding)
self.doc_handler.characters(data,0,len(data))
def handle_cdata(self,data):
"Handles CDATA marked sections."
data = unicode(data, self.encoding)
self.doc_handler.characters(data,0,len(data))
def getLineNumber(self):
return self.lineno
def getSystemId(self):
return self.sysID
def _can_locate(self):
"Internal: returns true if location info is available."
return 1
# --- EXPERIMENTAL SAX PYTHON EXTENSIONS
def get_parser_name(self):
return "xmllib"
def get_parser_version(self):
return xmllib.version
def get_driver_version(self):
return version
def is_validating(self):
return 0
def is_dtd_reading(self):
return 0
def reset(self):
xmllib.XMLParser.reset(self)
self.unfed_so_far=1
self.encoding = "utf-8"
def feed(self,data):
if self.unfed_so_far:
self.doc_handler.startDocument()
self.unfed_so_far=0
xmllib.XMLParser.feed(self,data)
def close(self):
xmllib.XMLParser.close(self)
self.doc_handler.endDocument()
# --- Global functions
def create_parser():
return SAX_XLParser()
|