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.startDocument()
gen.startPrefixMapping("ns1", ns_uri) gen.startPrefixMapping("ns1", ns_uri)
gen.startElementNS((ns_uri, "doc"), "ns1:doc", {}) 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.endElementNS((ns_uri, "doc"), "ns1:doc")
gen.endPrefixMapping("ns1") gen.endPrefixMapping("ns1")
gen.endDocument() 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) ns_uri)
# ===== XMLFilterBase # ===== XMLFilterBase

View file

@ -62,7 +62,12 @@ class XMLGenerator(handler.ContentHandler):
self._out.write('</%s>' % name) self._out.write('</%s>' % name)
def startElementNS(self, name, qname, attrs): 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) self._out.write('<' + name)
for pair in self._undeclared_ns_maps: for pair in self._undeclared_ns_maps:
@ -75,7 +80,10 @@ class XMLGenerator(handler.ContentHandler):
self._out.write('>') self._out.write('>')
def endElementNS(self, name, qname): 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) self._out.write('</%s>' % name)
def characters(self, content): def characters(self, content):