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