Support non-namespace elements in *ElementNS of XMLGenerator.

This commit is contained in:
Martin v. Löwis 2000-10-03 22:35:29 +00:00
parent 1654b43ef7
commit cf0a1cc417
2 changed files with 15 additions and 3 deletions

View File

@ -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

View File

@ -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):