[XML-SIG] losing cdata tag

Paul Tremblay phthenry@earthlink.net
Sat, 25 May 2002 19:14:20 -0400


I have copied the code below from python cookbook, but it is not
working. Specifically, the "def startCDATA(self)" method does not
get invoked.

Since this method does not get invoked, my cdata is not getting
put between the right tags. That means my output file is no
longer valid xml, and I cannot parse it again.

Thanks

Paul

**************

#!/usr/bin/python


from xml.sax import sax2exts, saxutils, handler
from xml.sax import SAXNotSupportedException, SAXNotRecognizedException
import sys




class EchoGenerator(saxutils.XMLGenerator):

	def __init__(self, out=None, encoding="iso-8859-1"):
         saxutils.XMLGenerator.__init__(self, out, encoding)
         self._in_entity = 0
         self._in_cdata = 0

	def characters(self, content):
         if self._in_entity:
             return
         elif self._in_cdata:
             self._out.write(content)
         else:
             saxutils.XMLGenerator.characters(self, content)

     # -- LexicalHandler interface

	def comment(self, content):
         self._out.write('<!--%s-->' % content)

	def startDTD(self, name, public_id, system_id):
         self._out.write('<!DOCTYPE %s' % name)
         if public_id:
             self._out.write(' PUBLIC %s %s' % (
                 saxutils.quoteattr(public_id),
                 saxutils.quoteattr(system_id)))
         elif system_id:
             self._out.write(' SYSTEM %s' % saxutils.quoteattr(system_id))

	def endDTD(self):
         self._out.write('>\n')

	def startEntity(self, name):
         self._out.write('&%s;' % name)
         self._in_entity = 1

	def endEntity(self, name):
         self._in_entity = 0

	def startCDATA(self):
		self._out.write('<![CDATA[')
		self._in_cdata = 1

	def endCDATA(self):
         self._out.write(']]>')
         self._in_cdata = 0


def test(xmlfile):
     parser = sax2exts.make_parser([
         'pirxx',
         'xml.sax.drivers2.drv_xmlproc',
         'xml.sax.drivers2.drv_pyexpat',
     ])
     print >>sys.stderr, "*** Using", parser

     try:
         parser.setFeature(handler.feature_namespaces, 1)
     except (SAXNotRecognizedException, SAXNotSupportedException):
         print "not recognized"
     try:
         parser.setFeature(handler.feature_validation, 0)
     except (SAXNotRecognizedException, SAXNotSupportedException):
         print "not recognized"

     saxhandler = EchoGenerator()
     parser.setContentHandler(saxhandler)
     parser.setProperty(handler.property_lexical_handler, saxhandler)
     parser.parse(xmlfile)

if __name__ == "__main__":
	file = "/home/paul/Documents/help.notes/my_python_documentation.xml"
	test(file)
	



-- 

************************
*Paul Tremblay         *
*phthenry@earthlink.net*
************************