summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_minidom.py16
-rw-r--r--Lib/xml/dom/minidom.py3
-rw-r--r--Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst2
3 files changed, 20 insertions, 1 deletions
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index f3ef958..7096585 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1631,5 +1631,21 @@ class MinidomTest(unittest.TestCase):
'<?xml version="1.0" ?>\n'
'<curriculum status="public" company="example"/>\n')
+ def test_toprettyxml_with_cdata(self):
+ xml_str = '<?xml version="1.0" ?><root><node><![CDATA[</data>]]></node></root>'
+ doc = parseString(xml_str)
+ self.assertEqual(doc.toprettyxml(),
+ '<?xml version="1.0" ?>\n'
+ '<root>\n'
+ '\t<node><![CDATA[</data>]]></node>\n'
+ '</root>\n')
+
+ def test_cdata_parsing(self):
+ xml_str = '<?xml version="1.0" ?><root><node><![CDATA[</data>]]></node></root>'
+ dom1 = parseString(xml_str)
+ self.checkWholeText(dom1.getElementsByTagName('node')[0].firstChild, '</data>')
+ dom2 = parseString(dom1.toprettyxml())
+ self.checkWholeText(dom2.getElementsByTagName('node')[0].firstChild, '</data>')
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 43569dd..464420b 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -862,7 +862,8 @@ class Element(Node):
if self.childNodes:
writer.write(">")
if (len(self.childNodes) == 1 and
- self.childNodes[0].nodeType == Node.TEXT_NODE):
+ self.childNodes[0].nodeType in (
+ Node.TEXT_NODE, Node.CDATA_SECTION_NODE)):
self.childNodes[0].writexml(writer, '', '', '')
else:
writer.write(newl)
diff --git a/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst b/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst
new file mode 100644
index 0000000..3873329
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst
@@ -0,0 +1,2 @@
+Fixed wrong indentation writing for CDATA section in xml.dom.minidom.
+Patch by Vladimir Surjaninov.