[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*
************************