diff options
-rw-r--r-- | Lib/test/test_minidom.py | 16 | ||||
-rw-r--r-- | Lib/xml/dom/minidom.py | 3 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-03-23-17-16-15.bpo-36407.LG3aC4.rst | 2 |
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. |