Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cf0a1cc

Browse files
committed
Support non-namespace elements in *ElementNS of XMLGenerator.
1 parent 1654b43 commit cf0a1cc

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

Lib/test/test_sax.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,15 @@ def test_xmlgen_ns():
112112
gen.startDocument()
113113
gen.startPrefixMapping("ns1", ns_uri)
114114
gen.startElementNS((ns_uri, "doc"), "ns1:doc", {})
115+
# add an unqualified name
116+
gen.startElementNS((None, "udoc"), None, {})
117+
gen.endElementNS((None, "udoc"), None)
115118
gen.endElementNS((ns_uri, "doc"), "ns1:doc")
116119
gen.endPrefixMapping("ns1")
117120
gen.endDocument()
118121

119-
return result.getvalue() == start + ('<ns1:doc xmlns:ns1="%s"></ns1:doc>' %
122+
return result.getvalue() == start + \
123+
('<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>' %
120124
ns_uri)
121125

122126
# ===== XMLFilterBase

Lib/xml/sax/saxutils.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ def endElement(self, name):
6262
self._out.write('</%s>' % name)
6363

6464
def startElementNS(self, name, qname, attrs):
65-
name = self._current_context[name[0]] + ":" + name[1]
65+
if name[0] is None:
66+
# if the name was not namespace-scoped, use the unqualified part
67+
name = name[1]
68+
else:
69+
# else try to restore the original prefix from the namespace
70+
name = self._current_context[name[0]] + ":" + name[1]
6671
self._out.write('<' + name)
6772

6873
for pair in self._undeclared_ns_maps:
@@ -75,7 +80,10 @@ def startElementNS(self, name, qname, attrs):
7580
self._out.write('>')
7681

7782
def endElementNS(self, name, qname):
78-
name = self._current_context[name[0]] + ":" + name[1]
83+
if name[0] is None:
84+
name = name[1]
85+
else:
86+
name = self._current_context[name[0]] + ":" + name[1]
7987
self._out.write('</%s>' % name)
8088

8189
def characters(self, content):

0 commit comments

Comments
 (0)