summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/mllib/__init__.py30
-rw-r--r--specs/amqp.0-10-qpid-errata.xml2
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">