diff options
| -rw-r--r-- | python/mllib/__init__.py | 30 | ||||
| -rw-r--r-- | specs/amqp.0-10-qpid-errata.xml | 2 |
2 files changed, 26 insertions, 6 deletions
diff --git a/python/mllib/__init__.py b/python/mllib/__init__.py index 39e9363614..9aa1e56e66 100644 --- a/python/mllib/__init__.py +++ b/python/mllib/__init__.py @@ -24,6 +24,8 @@ both SGML and XML. import os, dom, transforms, parsers, sys import xml.sax, types +from xml.sax.handler import ErrorHandler +from xml.sax.xmlreader import InputSource from cStringIO import StringIO def transform(node, *args): @@ -49,15 +51,33 @@ def sgml_parse(source): p.close() return p.parser.tree -def xml_parse(filename): +class Resolver: + + def __init__(self, path): + self.path = path + + def resolveEntity(self, publicId, systemId): + for p in self.path: + fname = os.path.join(p, systemId) + if os.path.exists(fname): + source = InputSource(systemId) + source.setByteStream(open(fname)) + return source + return InputSource(systemId) + +def xml_parse(filename, path=()): if sys.version_info[0:2] == (2,3): # XXX: this is for older versions of python - source = "file://%s" % os.path.abspath(filename) + source = "file://%s" % os.path.abspath(filename) else: source = filename - p = parsers.XMLParser() - xml.sax.parse(source, p) - return p.parser.tree + h = parsers.XMLParser() + p = xml.sax.make_parser() + p.setContentHandler(h) + p.setErrorHandler(ErrorHandler()) + p.setEntityResolver(Resolver(path)) + p.parse(source) + return h.parser.tree def sexp(node): s = transforms.Sexp() diff --git a/specs/amqp.0-10-qpid-errata.xml b/specs/amqp.0-10-qpid-errata.xml index 5a554b0ab7..365928ea4e 100644 --- a/specs/amqp.0-10-qpid-errata.xml +++ b/specs/amqp.0-10-qpid-errata.xml @@ -121,7 +121,7 @@ --> -<!--<!DOCTYPE amqp SYSTEM "amqp.0-10.dtd">--> +<!DOCTYPE amqp SYSTEM "amqp.0-10.dtd"> <amqp xmlns="http://www.amqp.org/schema/amqp.xsd" major="0" minor="10" port="5672"> |
