panzi added the comment:
patch for _xmlplus.sax.saxutils.py
Added file: http://bugs.python.org/file8632/_xmlplus.sax.saxutils.patch
__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1343>
__________________________________
--- /usr/lib/python2.5/site-packages/_xmlplus/sax/saxutils.py 2004-11-29 13:36:36.000000000 +0100
+++ site-packages/_xmlplus/sax/saxutils.py 2007-10-22 22:44:54.000000000 +0200
@@ -6,9 +6,11 @@ $Id: saxutils.py,v 1.35 2004/03/20 07:46
"""
import os, urlparse, urllib2, types
-import handler
-import xmlreader
-import sys, _exceptions, saxlib
+from xml.sax import handler
+from xml.sax import xmlreader
+from xml.sax import _exceptions
+from xml.sax import saxlib
+import sys
try:
_StringTypes = [types.StringType, types.UnicodeType]
@@ -173,7 +175,7 @@ class ErrorRaiser:
raise exception
# --- AttributesImpl now lives in xmlreader
-from xmlreader import AttributesImpl
+from xml.sax.xmlreader import AttributesImpl
# --- XMLGenerator is the SAX2 ContentHandler for writing back XML
import codecs
@@ -231,7 +233,12 @@ class XMLGenerator(handler.ContentHandle
self._undeclared_ns_maps = []
self._encoding = encoding
self._generated_prefix_ctr = 0
- return
+ self._pending_start_element = False
+
+ def _finish_pending_start_element(self,endElement=False):
+ if self._pending_start_element:
+ self._out.write('>')
+ self._pending_start_element = False
# ContentHandler methods
@@ -249,16 +256,22 @@ class XMLGenerator(handler.ContentHandle
del self._ns_contexts[-1]
def startElement(self, name, attrs):
+ self._finish_pending_start_element()
self._out.write('<' + name)
for (name, value) in attrs.items():
self._out.write(' %s=' % name)
writeattr(self._out, value)
- self._out.write('>')
+ self._pending_start_element = True
def endElement(self, name):
- self._out.write('</%s>' % name)
+ if self._pending_start_element:
+ self._out.write('/>')
+ self._pending_start_element = False
+ else:
+ self._out.write('</%s>' % name)
def startElementNS(self, name, qname, attrs):
+ self._finish_pending_start_element()
if name[0] is None:
name = name[1]
elif self._current_context[name[0]] is None:
@@ -291,27 +304,36 @@ class XMLGenerator(handler.ContentHandle
name = self._current_context[name[0]] + ":" + name[1]
self._out.write(' %s=' % name)
writeattr(self._out, value)
- self._out.write('>')
+ self._pending_start_element = True
def endElementNS(self, name, qname):
- # XXX: if qname is not None, we better use it.
- # Python 2.0b2 requires us to use the recorded prefix for
- # name[0], though
- if name[0] is None:
- qname = name[1]
- elif self._current_context[name[0]] is None:
- qname = name[1]
+ if self._pending_start_element:
+ self._out.write('/>')
+ self._pending_start_element = False
else:
- qname = self._current_context[name[0]] + ":" + name[1]
- self._out.write('</%s>' % qname)
+ # XXX: if qname is not None, we better use it.
+ # Python 2.0b2 requires us to use the recorded prefix for
+ # name[0], though
+ if name[0] is None:
+ qname = name[1]
+ elif self._current_context[name[0]] is None:
+ qname = name[1]
+ else:
+ qname = self._current_context[name[0]] + ":" + name[1]
+ self._out.write('</%s>' % qname)
def characters(self, content):
- writetext(self._out, content)
+ if content:
+ self._finish_pending_start_element()
+ writetext(self._out, content)
def ignorableWhitespace(self, content):
- self._out.write(content)
+ if content:
+ self._finish_pending_start_element()
+ self._out.write(content)
def processingInstruction(self, target, data):
+ self._finish_pending_start_element()
self._out.write('<?%s %s?>' % (target, data))
@@ -323,10 +345,12 @@ class LexicalXMLGenerator(XMLGenerator,
self._in_cdata = 0
def characters(self, content):
- if self._in_cdata:
- self._out.write(content.replace(']]>', ']]>]]><![CDATA['))
- else:
- self._out.write(escape(content))
+ if content:
+ self._finish_pending_start_element()
+ if self._in_cdata:
+ self._out.write(content.replace(']]>', ']]>]]><![CDATA['))
+ else:
+ self._out.write(escape(content))
# LexicalHandler methods
# (we only support the most important ones and inherit the rest)
@@ -344,11 +368,13 @@ class LexicalXMLGenerator(XMLGenerator,
self._out.write('>')
def comment(self, content):
+ self._finish_pending_start_element()
self._out.write('<!--')
self._out.write(content)
self._out.write('-->')
def startCDATA(self):
+ self._finish_pending_start_element()
self._in_cdata = 1
self._out.write('<![CDATA[')
@@ -617,7 +643,6 @@ class EventBroadcaster:
return "<EventBroadcaster instance at %d>" % id(self)
# --- ESIS document handler
-import saxlib
class ESISDocHandler(saxlib.HandlerBase):
"A SAX document handler that produces naive ESIS output."
@@ -713,7 +738,7 @@ class mllib:
self.reset()
def reset(self):
- import saxexts # only used here
+ from xml.sax import saxexts # only used here
self.parser=saxexts.XMLParserFactory.make_parser()
self.handler=mllib.Handler(self.parser,self)
self.handler.reset()
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com