Commit cf0a1cc4 authored by Martin v. Löwis's avatar Martin v. Löwis

Support non-namespace elements in *ElementNS of XMLGenerator.

parent 1654b43e
......@@ -112,11 +112,15 @@ def test_xmlgen_ns():
gen.startDocument()
gen.startPrefixMapping("ns1", ns_uri)
gen.startElementNS((ns_uri, "doc"), "ns1:doc", {})
# add an unqualified name
gen.startElementNS((None, "udoc"), None, {})
gen.endElementNS((None, "udoc"), None)
gen.endElementNS((ns_uri, "doc"), "ns1:doc")
gen.endPrefixMapping("ns1")
gen.endDocument()
return result.getvalue() == start + ('<ns1:doc xmlns:ns1="%s"></ns1:doc>' %
return result.getvalue() == start + \
('<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>' %
ns_uri)
# ===== XMLFilterBase
......
......@@ -62,7 +62,12 @@ class XMLGenerator(handler.ContentHandler):
self._out.write('</%s>' % name)
def startElementNS(self, name, qname, attrs):
name = self._current_context[name[0]] + ":" + name[1]
if name[0] is None:
# if the name was not namespace-scoped, use the unqualified part
name = name[1]
else:
# else try to restore the original prefix from the namespace
name = self._current_context[name[0]] + ":" + name[1]
self._out.write('<' + name)
for pair in self._undeclared_ns_maps:
......@@ -75,7 +80,10 @@ class XMLGenerator(handler.ContentHandler):
self._out.write('>')
def endElementNS(self, name, qname):
name = self._current_context[name[0]] + ":" + name[1]
if name[0] is None:
name = name[1]
else:
name = self._current_context[name[0]] + ":" + name[1]
self._out.write('</%s>' % name)
def characters(self, content):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment