I’ve discovered that cElementTree is about 30 times faster than xml.dom.minidom and I’m rewriting my XML encoding/decoding code. However, I need to output XML that contains CDATA sections and there doesn’t seem to be a way to do that with ElementTree.
Can it be done?
After a bit of work, I found the answer myself. Looking at the ElementTree.py source code, I found there was special handling of XML comments and preprocessing instructions. What they do is create a factory function for the special element type that uses a special (non-string) tag value to differentiate it from regular elements.
Then in the
_writefunction of ElementTree that actually outputs the XML, there’s a special case handling for comments:In order to support CDATA sections, I create a factory function called
CDATA, extended the ElementTree class and changed the_writefunction to handle the CDATA elements.This still doesn’t help if you want to parse an XML with CDATA sections and then output it again with the CDATA sections, but it at least allows you to create XMLs with CDATA sections programmatically, which is what I needed to do.
The implementation seems to work with both ElementTree and cElementTree.