Index: Lib/test/test_minidom.py =================================================================== --- Lib/test/test_minidom.py (revision 69418) +++ Lib/test/test_minidom.py (working copy) @@ -459,11 +459,24 @@ self.confirm(str == domstr) def testAltNewline(self): - str = '\n\n' + str = '\n' dom = parseString(str) domstr = dom.toprettyxml(newl="\r\n") dom.unlink() self.confirm(domstr == str.replace("\n", "\r\n")) + + def testPrettyPrinting(self): + str = '\nText node1Sub textnode' + dom = parseString(str) + domstr = dom.toprettyxml(indent=" ",newl="\n") + dom.unlink() + dom = parseString(domstr) + domstr2 = dom.toprettyxml(indent=" ",newl="\n") + dom.unlink() + self.confirm(domstr == domstr2) + self.confirm(domstr == u'\n\n \n \n Text node1Sub textnode\n \n \n \n') + + def testProcessingInstruction(self): dom = parseString('') Index: Lib/xml/dom/minidom.py =================================================================== --- Lib/xml/dom/minidom.py (revision 69418) +++ Lib/xml/dom/minidom.py (working copy) @@ -801,23 +801,32 @@ # indent = current indentation # addindent = indentation to add to higher levels # newl = newline string - writer.write(indent+"<" + self.tagName) + writer.write(newl+indent+"<" + self.tagName) attrs = self._get_attributes() a_names = attrs.keys() a_names.sort() + onetextnode = False for a_name in a_names: writer.write(" %s=\"" % a_name) _write_data(writer, attrs[a_name].value) writer.write("\"") if self.childNodes: - writer.write(">%s"%(newl)) + writer.write(">") + lastnodetype=self.childNodes[0].nodeType for node in self.childNodes: - node.writexml(writer,indent+addindent,addindent,newl) - writer.write("%s%s" % (indent,self.tagName,newl)) + if lastnodetype==node.TEXT_NODE: + node.writexml(writer,"","","") + else: + node.writexml(writer, ("%s%s") % (indent,addindent), addindent, newl) + lastnodetype=node.nodeType + if lastnodetype==node.TEXT_NODE: + writer.write("" % (self.tagName)) + else: + writer.write("%s%s" % (newl,indent,self.tagName)) else: - writer.write("/>%s"%(newl)) + writer.write("/>") def _get_attributes(self): return NamedNodeMap(self._attrs, self._attrsNS, self) @@ -1033,7 +1042,7 @@ return newText def writexml(self, writer, indent="", addindent="", newl=""): - _write_data(writer, "%s%s%s"%(indent, self.data, newl)) + _write_data(writer, "%s"%(self.data)) # DOM Level 3 (WD 9 April 2002) @@ -1742,9 +1751,9 @@ def writexml(self, writer, indent="", addindent="", newl="", encoding = None): if encoding is None: - writer.write(''+newl) + writer.write('') else: - writer.write('%s' % (encoding, newl)) + writer.write('' % (encoding)) for node in self.childNodes: node.writexml(writer, indent, addindent, newl)