panzi added the comment:

patch for xml/sax/saxutils.py

Added file: http://bugs.python.org/file8631/xml.sax.saxutils.patch

__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1343>
__________________________________
--- /usr/lib/python2.5/xml/sax/saxutils.py	2007-05-02 18:56:40.000000000 +0200
+++ xml/sax/saxutils.py	2007-10-22 22:44:33.000000000 +0200
@@ -4,8 +4,8 @@ convenience of application and driver wr
 """
 
 import os, urlparse, urllib, types
-import handler
-import xmlreader
+from xml.sax import handler
+from xml.sax import xmlreader
 
 try:
     _StringTypes = [types.StringType, types.UnicodeType]
@@ -93,6 +93,7 @@ class XMLGenerator(handler.ContentHandle
         self._current_context = self._ns_contexts[-1]
         self._undeclared_ns_maps = []
         self._encoding = encoding
+        self._pending_start_element = False
 
     def _write(self, text):
         if isinstance(text, str):
@@ -111,6 +112,11 @@ class XMLGenerator(handler.ContentHandle
         # Return the unqualified name
         return name[1]
 
+    def _finish_pending_start_element(self,endElement=False):
+        if self._pending_start_element:
+            self._write('>')
+            self._pending_start_element = False
+
     # ContentHandler methods
 
     def startDocument(self):
@@ -127,15 +133,21 @@ class XMLGenerator(handler.ContentHandle
         del self._ns_contexts[-1]
 
     def startElement(self, name, attrs):
+        self._finish_pending_start_element()
         self._write('<' + name)
         for (name, value) in attrs.items():
             self._write(' %s=%s' % (name, quoteattr(value)))
-        self._write('>')
+        self._pending_start_element = True
 
     def endElement(self, name):
-        self._write('</%s>' % name)
+        if self._pending_start_element:
+            self._write('/>')
+            self._pending_start_element = False
+        else:
+            self._write('</%s>' % name)
 
     def startElementNS(self, name, qname, attrs):
+        self._finish_pending_start_element()
         self._write('<' + self._qname(name))
 
         for prefix, uri in self._undeclared_ns_maps:
@@ -147,18 +159,27 @@ class XMLGenerator(handler.ContentHandle
 
         for (name, value) in attrs.items():
             self._write(' %s=%s' % (self._qname(name), quoteattr(value)))
-        self._write('>')
+        self._pending_start_element = True
 
     def endElementNS(self, name, qname):
-        self._write('</%s>' % self._qname(name))
+        if self._pending_start_element:
+            self._write('/>')
+            self._pending_start_element = False
+        else:
+            self._write('</%s>' % self._qname(name))
 
     def characters(self, content):
-        self._write(escape(content))
+        if content:
+            self._finish_pending_start_element()
+            self._write(escape(content))
 
     def ignorableWhitespace(self, content):
-        self._write(content)
+        if content:
+            self._finish_pending_start_element()
+            self._write(content)
 
     def processingInstruction(self, target, data):
+        self._finish_pending_start_element()
         self._write('<?%s %s?>' % (target, data))
 
 
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to