saxutils.XMLGenerator and CDATA

Robert Kern robert.kern at
Fri Jan 20 18:45:21 EST 2006

chris wrote:
> Confused somewhat xml newbie.  I'm trying to output xml with a CDATA
> section, using saxutils.XMLGenerator, but the output contains escaped
> '<' and '>'  and '&' from the CDATA element.  Shouldn't it be spit out
> intact?
> Here's code and output:
> from xml.sax import saxutils
> import sys
> handler = saxutils.XMLGenerator(sys.stdout)
> handler.startDocument()
> handler.startElement('sometag', {})
> handler.characters('<![CDATA[x&<>xxx]]>')
> handler.endElement('sometag')
> handler.endDocument()
> Produces:
> <?xml version="1.0" encoding="iso-8859-1"?>
> <sometag><![CDATA[x&<>xxx]]></sometag>
> I was expecting to see
> <?xml version="1.0" encoding="iso-8859-1"?>
> <sometag><![CDATA[x&<>xxx]]></sometag>
> What am I doing wrong here?

The <![CDATA[]]> crud is markup, not character data. You are passing it in as
characters (hence the method's name "characters"), so saxutils.XMLGenerator is
treating it as such.

<!CDATA[]]> sections are intended for human authoring, not computer authoring.
If you want to keep your sanity, just don't do it.

Robert Kern
robert.kern at

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter

More information about the Python-list mailing list