Drop xmllib in favor of SAX.

This commit is contained in:
Fred Drake 2001-11-30 19:30:03 +00:00
parent 1e53fa7907
commit 381832ead5

View file

@ -22,16 +22,11 @@ import re
import string import string
import sys import sys
import UserList import UserList
import xml.sax
import xml.sax.saxutils import xml.sax.saxutils
from types import ListType, StringType, TupleType from types import ListType, StringType, TupleType
try:
from xml.parsers.xmllib import XMLParser
except ImportError:
from xmllib import XMLParser
from esistools import encode from esistools import encode
@ -439,14 +434,11 @@ class Parameter:
self.implied = 0 self.implied = 0
class TableParser(XMLParser): class TableHandler(xml.sax.handler.ContentHandler):
def __init__(self, table=None): def __init__(self):
if table is None: self.__table = {}
table = {}
self.__table = table
self.__current = None
self.__buffer = '' self.__buffer = ''
XMLParser.__init__(self) self.__methods = {}
def get_table(self): def get_table(self):
for entry in self.__table.values(): for entry in self.__table.values():
@ -457,6 +449,27 @@ class TableParser(XMLParser):
entry.has_content = 1 entry.has_content = 1
return self.__table return self.__table
def startElement(self, tag, attrs):
try:
start, end = self.__methods[tag]
except KeyError:
start = getattr(self, "start_" + tag, None)
end = getattr(self, "end_" + tag, None)
self.__methods[tag] = (start, end)
if start:
start(attrs)
def endElement(self, tag):
start, end = self.__methods[tag]
if end:
end()
def endDocument(self):
self.__methods.clear()
def characters(self, data):
self.__buffer += data
def start_environment(self, attrs): def start_environment(self, attrs):
name = attrs["name"] name = attrs["name"]
self.__current = TableEntry(name, environment=1) self.__current = TableEntry(name, environment=1)
@ -517,15 +530,11 @@ class TableParser(XMLParser):
p.text = self.__buffer p.text = self.__buffer
self.__current.parameters.append(p) self.__current.parameters.append(p)
def handle_data(self, data):
self.__buffer = self.__buffer + data
def load_table(fp):
def load_table(fp, table=None): ch = TableHandler()
parser = TableParser(table=table) xml.sax.parse(fp, ch)
parser.feed(fp.read()) return ch.get_table()
parser.close()
return parser.get_table()
def main(): def main():