--- Lib/test/test_sax.py (revision 62992) +++ Lib/test/test_sax.py (working copy) @@ -163,6 +163,16 @@ self.assertEquals(result.getvalue(), start + "") + def test_xmlgen_basic_empty(self): + result = StringIO() + gen = XMLGenerator(result, short_empty_elements=True) + gen.startDocument() + gen.startElement("doc", {}) + gen.endElement("doc") + gen.endDocument() + + self.assertEquals(result.getvalue(), start + "") + def test_xmlgen_content(self): result = StringIO() gen = XMLGenerator(result) @@ -175,6 +185,18 @@ self.assertEquals(result.getvalue(), start + "huhei") + def test_xmlgen_content_empty(self): + result = StringIO() + gen = XMLGenerator(result, short_empty_elements=True) + + gen.startDocument() + gen.startElement("doc", {}) + gen.characters("huhei") + gen.endElement("doc") + gen.endDocument() + + self.assertEquals(result.getvalue(), start + "huhei") + def test_xmlgen_pi(self): result = StringIO() gen = XMLGenerator(result) @@ -232,6 +254,18 @@ self.assertEquals(result.getvalue(), start + " ") + def test_xmlgen_ignorable_empty(self): + result = StringIO() + gen = XMLGenerator(result, short_empty_elements=True) + + gen.startDocument() + gen.startElement("doc", {}) + gen.ignorableWhitespace(" ") + gen.endElement("doc") + gen.endDocument() + + self.assertEquals(result.getvalue(), start + " ") + def test_xmlgen_ns(self): result = StringIO() gen = XMLGenerator(result) @@ -250,6 +284,24 @@ ('' % ns_uri)) + def test_xmlgen_ns_empty(self): + result = StringIO() + gen = XMLGenerator(result, short_empty_elements=True) + + 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() + + self.assertEquals(result.getvalue(), start + \ + ('' % + ns_uri)) + def test_1463026_1(self): result = StringIO() gen = XMLGenerator(result) @@ -261,6 +313,17 @@ self.assertEquals(result.getvalue(), start+'') + def test_1463026_1_empty(self): + result = StringIO() + gen = XMLGenerator(result, short_empty_elements=True) + + gen.startDocument() + gen.startElementNS((None, 'a'), 'a', {(None, 'b'):'c'}) + gen.endElementNS((None, 'a'), 'a') + gen.endDocument() + + self.assertEquals(result.getvalue(), start+'') + def test_1463026_2(self): result = StringIO() gen = XMLGenerator(result) --- Lib/xml/sax/saxutils.py.orig 2008-05-10 17:37:22.000000000 +0200 +++ Lib/xml/sax/saxutils.py 2008-05-10 18:04:39.000000000 +0200 @@ -83,7 +83,7 @@ class XMLGenerator(handler.ContentHandler): - def __init__(self, out=None, encoding="iso-8859-1"): + def __init__(self, out=None, encoding="iso-8859-1", short_empty_elements=False): if out is None: import sys out = sys.stdout @@ -93,6 +93,7 @@ self._current_context = self._ns_contexts[-1] self._undeclared_ns_maps = [] self._encoding = encoding + self._short_empty_elements = short_empty_elements self._pending_start_element = False def _write(self, text): @@ -137,7 +138,10 @@ self._write('<' + name) for (name, value) in attrs.items(): self._write(' %s=%s' % (name, quoteattr(value))) - self._pending_start_element = True + if self._short_empty_elements: + self._pending_start_element = True + else: + self._write(">") def endElement(self, name): if self._pending_start_element: