[Python-checkins] r53755 - in python/branches/release25-maint: Lib/test/test_sax.py Lib/xml/sax/saxutils.py Misc/NEWS

martin.v.loewis python-checkins at python.org
Mon Feb 12 13:21:42 CET 2007


Author: martin.v.loewis
Date: Mon Feb 12 13:21:41 2007
New Revision: 53755
Modified:
 python/branches/release25-maint/Lib/test/test_sax.py
 python/branches/release25-maint/Lib/xml/sax/saxutils.py
 python/branches/release25-maint/Misc/NEWS
Log:
Patch 1463026: Support default namespace in XMLGenerator.
Fixes #847665.
Modified: python/branches/release25-maint/Lib/test/test_sax.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_sax.py	(original)
+++ python/branches/release25-maint/Lib/test/test_sax.py	Mon Feb 12 13:21:41 2007
@@ -216,7 +216,44 @@
 ('<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>' %
 ns_uri)
 
-# ===== XMLFilterBase
+def test_1463026_1():
+ result = StringIO()
+ gen = XMLGenerator(result)
+
+ gen.startDocument()
+ gen.startElementNS((None, 'a'), 'a', {(None, 'b'):'c'})
+ gen.endElementNS((None, 'a'), 'a')
+ gen.endDocument()
+
+ return result.getvalue() == start+'<a b="c"></a>'
+
+def test_1463026_2():
+ result = StringIO()
+ gen = XMLGenerator(result)
+
+ gen.startDocument()
+ gen.startPrefixMapping(None, 'qux')
+ gen.startElementNS(('qux', 'a'), 'a', {})
+ gen.endElementNS(('qux', 'a'), 'a')
+ gen.endPrefixMapping(None)
+ gen.endDocument()
+
+ return result.getvalue() == start+'<a xmlns="qux"></a>'
+
+def test_1463026_3():
+ result = StringIO()
+ gen = XMLGenerator(result)
+
+ gen.startDocument()
+ gen.startPrefixMapping('my', 'qux')
+ gen.startElementNS(('qux', 'a'), 'a', {(None, 'b'):'c'})
+ gen.endElementNS(('qux', 'a'), 'a')
+ gen.endPrefixMapping('my')
+ gen.endDocument()
+
+ return result.getvalue() == start+'<my:a xmlns:my="qux" b="c"></my:a>'
+ 
+# ===== Xmlfilterbase
 
 def test_filter_basic():
 result = StringIO()
Modified: python/branches/release25-maint/Lib/xml/sax/saxutils.py
==============================================================================
--- python/branches/release25-maint/Lib/xml/sax/saxutils.py	(original)
+++ python/branches/release25-maint/Lib/xml/sax/saxutils.py	Mon Feb 12 13:21:41 2007
@@ -100,6 +100,17 @@
 else:
 self._out.write(text.encode(self._encoding, _error_handling))
 
+ def _qname(self, name):
+ """Builds a qualified name from a (ns_url, localname) pair"""
+ if name[0]:
+ # The name is in a non-empty namespace
+ prefix = self._current_context[name[0]]
+ if prefix:
+ # If it is not the default namespace, prepend the prefix
+ return prefix + ":" + name[1]
+ # Return the unqualified name
+ return name[1]
+
 # ContentHandler methods
 
 def startDocument(self):
@@ -125,29 +136,21 @@
 self._write('</%s>' % name)
 
 def startElementNS(self, name, qname, attrs):
- 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._write('<' + name)
+ self._write('<' + self._qname(name))
 
- for pair in self._undeclared_ns_maps:
- self._write(' xmlns:%s="%s"' % pair)
+ for prefix, uri in self._undeclared_ns_maps:
+ if prefix:
+ self._out.write(' xmlns:%s="%s"' % (prefix, uri))
+ else:
+ self._out.write(' xmlns="%s"' % uri)
 self._undeclared_ns_maps = []
 
 for (name, value) in attrs.items():
- name = self._current_context[name[0]] + ":" + name[1]
- self._write(' %s=%s' % (name, quoteattr(value)))
+ self._write(' %s=%s' % (self._qname(name), quoteattr(value)))
 self._write('>')
 
 def endElementNS(self, name, qname):
- if name[0] is None:
- name = name[1]
- else:
- name = self._current_context[name[0]] + ":" + name[1]
- self._write('</%s>' % name)
+ self._write('</%s>' % self._qname(name))
 
 def characters(self, content):
 self._write(escape(content))
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Mon Feb 12 13:21:41 2007
@@ -169,6 +169,8 @@
 Library
 -------
 
+- Patch 1463026: Support default namespace in XMLGenerator.
+
 - Patch 1571379: Make trace's --ignore-dir facility work in the face of
 relative directory names.
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /