"""
import handler
-
+import xmlreader
def escape(data, entities={}):
"""Escape &, <, and > in a string of data.
self._out = out
self._ns_contexts = [{}] # contains uri -> prefix dicts
self._current_context = self._ns_contexts[-1]
+ self._undeclared_ns_maps = []
self._encoding = encoding
# ContentHandler methods
def startPrefixMapping(self, prefix, uri):
self._ns_contexts.append(self._current_context.copy())
self._current_context[uri] = prefix
+ self._undeclared_ns_maps.append((prefix, uri))
def endPrefixMapping(self, prefix):
- del self._current_context[-1]
+ self._current_context = self._ns_contexts[-1]
+ del self._ns_contexts[-1]
def startElement(self, name, attrs):
self._out.write('<' + name)
def startElementNS(self, name, qname, attrs):
name = self._current_context[name[0]] + ":" + name[1]
self._out.write('<' + name)
+
+ for pair in self._undeclared_ns_maps:
+ self._out.write(' xmlns:%s="%s"' % pair)
+ self._undeclared_ns_maps = []
+
for (name, value) in attrs.items():
name = self._current_context[name[0]] + ":" + name[1]
self._out.write(' %s="%s"' % (name, escape(value)))
self._out.write('<?%s %s?>' % (target, data))
-class XMLFilterBase:
+class XMLFilterBase(xmlreader.XMLReader):
"""This class is designed to sit between an XMLReader and the
client application's event handlers. By default, it does nothing
but pass requests up to the reader and events on to the handlers
def characters(self, content):
self._cont_handler.characters(content)
- def ignorableWhitespace(self, chars, start, end):
- self._cont_handler.ignorableWhitespace(chars, start, end)
+ def ignorableWhitespace(self, chars):
+ self._cont_handler.ignorableWhitespace(chars)
def processingInstruction(self, target, data):
self._cont_handler.processingInstruction(target, data)