Sjoerd patches the previous patch:

In literal mode, also don't do anything about entity and character
references, or about closing CDATA elements.
diff --git a/Lib/xmllib.py b/Lib/xmllib.py
index 4e62ae5..bea210b 100644
--- a/Lib/xmllib.py
+++ b/Lib/xmllib.py
@@ -264,6 +264,11 @@
                     i = k
                     continue
             elif rawdata[i] == '&':
+                if self.literal:
+                    data = rawdata[i]
+                    self.handle_data(data)
+                    i = i+1
+                    continue
                 res = charref.match(rawdata, i)
                 if res is not None:
                     i = res.end(0)
@@ -292,6 +297,11 @@
                     self.lineno = self.lineno + string.count(res.group(0), '\n')
                     continue
             elif rawdata[i] == ']':
+                if self.literal:
+                    data = rawdata[i]
+                    self.handle_data(data)
+                    i = i+1
+                    continue
                 if n-i < 3:
                     break
                 if cdataclose.match(rawdata, i):