Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit def4728

Browse files
committed
#4147: merge with 3.2.
2 parents 4d5d4e2 + 8008f2a commit def4728

3 files changed

Lines changed: 45 additions & 10 deletions

File tree

Lib/test/test_minidom.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -467,12 +467,39 @@ def testAltNewline(self):
467467
dom.unlink()
468468
self.confirm(domstr == str.replace("\n", "\r\n"))
469469

470+
def test_toprettyxml_with_text_nodes(self):
471+
# see issue #4147, text nodes are not indented
472+
decl = '<?xml version="1.0" ?>\n'
473+
self.assertEqual(parseString('<B>A</B>').toprettyxml(),
474+
decl + '<B>A</B>\n')
475+
self.assertEqual(parseString('<C>A<B>A</B></C>').toprettyxml(),
476+
decl + '<C>\n\tA\n\t<B>A</B>\n</C>\n')
477+
self.assertEqual(parseString('<C><B>A</B>A</C>').toprettyxml(),
478+
decl + '<C>\n\t<B>A</B>\n\tA\n</C>\n')
479+
self.assertEqual(parseString('<C><B>A</B><B>A</B></C>').toprettyxml(),
480+
decl + '<C>\n\t<B>A</B>\n\t<B>A</B>\n</C>\n')
481+
self.assertEqual(parseString('<C><B>A</B>A<B>A</B></C>').toprettyxml(),
482+
decl + '<C>\n\t<B>A</B>\n\tA\n\t<B>A</B>\n</C>\n')
483+
484+
def test_toprettyxml_with_adjacent_text_nodes(self):
485+
# see issue #4147, adjacent text nodes are indented normally
486+
dom = Document()
487+
elem = dom.createElement('elem')
488+
elem.appendChild(dom.createTextNode('TEXT'))
489+
elem.appendChild(dom.createTextNode('TEXT'))
490+
dom.appendChild(elem)
491+
decl = '<?xml version="1.0" ?>\n'
492+
self.assertEqual(dom.toprettyxml(),
493+
decl + '<elem>\n\tTEXT\n\tTEXT\n</elem>\n')
494+
470495
def test_toprettyxml_preserves_content_of_text_node(self):
471-
str = '<A>B</A>'
472-
dom = parseString(str)
473-
dom2 = parseString(dom.toprettyxml())
474-
self.assertEqual(dom.childNodes[0].childNodes[0].toxml(),
475-
dom2.childNodes[0].childNodes[0].toxml())
496+
# see issue #4147
497+
for str in ('<B>A</B>', '<A><B>C</B></A>'):
498+
dom = parseString(str)
499+
dom2 = parseString(dom.toprettyxml())
500+
self.assertEqual(
501+
dom.getElementsByTagName('B')[0].childNodes[0].toxml(),
502+
dom2.getElementsByTagName('B')[0].childNodes[0].toxml())
476503

477504
def testProcessingInstruction(self):
478505
dom = parseString('<e><?mypi \t\n data \t\n ?></e>')

Lib/xml/dom/minidom.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -837,11 +837,15 @@ def writexml(self, writer, indent="", addindent="", newl=""):
837837
writer.write("\"")
838838
if self.childNodes:
839839
writer.write(">")
840-
if self.childNodes[0].nodeType != Node.TEXT_NODE:
840+
if (len(self.childNodes) == 1 and
841+
self.childNodes[0].nodeType == Node.TEXT_NODE):
842+
self.childNodes[0].writexml(writer, '', '', '')
843+
else:
841844
writer.write(newl)
842-
for node in self.childNodes:
843-
node.writexml(writer,indent+addindent,addindent,newl)
844-
writer.write("%s</%s>%s" % (indent,self.tagName,newl))
845+
for node in self.childNodes:
846+
node.writexml(writer, indent+addindent, addindent, newl)
847+
writer.write(indent)
848+
writer.write("</%s>%s" % (self.tagName, newl))
845849
else:
846850
writer.write("/>%s"%(newl))
847851

@@ -1063,7 +1067,7 @@ def splitText(self, offset):
10631067
return newText
10641068

10651069
def writexml(self, writer, indent="", addindent="", newl=""):
1066-
_write_data(writer, self.data)
1070+
_write_data(writer, "%s%s%s" % (indent, self.data, newl))
10671071

10681072
# DOM Level 3 (WD 9 April 2002)
10691073

Misc/NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,10 @@ Core and Builtins
377377
Library
378378
-------
379379

380+
- Issue #4147: minidom's toprettyxml no longer adds whitespace around a text
381+
node when it is the only child of an element. Initial patch by Dan
382+
Kenigsberg.
383+
380384
- Issue #13374: The Windows bytes API has been deprecated in the os module. Use
381385
Unicode filenames instead of bytes filenames to not depend on the ANSI code
382386
page anymore and to support any filename.

0 commit comments

Comments
 (0)