--- /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('' % name) + if self._pending_start_element: + self._out.write('/>') + self._pending_start_element = False + else: + self._out.write('' % 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('' % 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('' % 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('' % (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(']]>', ']]>]]>', ']]>]]>') def comment(self, content): + self._finish_pending_start_element() self._out.write('') def startCDATA(self): + self._finish_pending_start_element() self._in_cdata = 1 self._out.write('" % 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()