bpo-34160: Add the sort attribute to the xml.dom.minidom.Node.writexml method by matrixise · Pull Request #12354 · python/cpython

Expand Up @@ -847,27 +847,31 @@ def getElementsByTagNameNS(self, namespaceURI, localName): def __repr__(self): return "<DOM Element: %s at %#x>" % (self.tagName, id(self))
def writexml(self, writer, indent="", addindent="", newl=""): def writexml(self, writer, indent="", addindent="", newl="", sort=False): # indent = current indentation # addindent = indentation to add to higher levels # newl = newline string writer.write(indent+"<" + self.tagName)
attrs = self._get_attributes()
for a_name in attrs.keys(): attribute_names = attrs.keys() if sort: attribute_names = sorted(attribute_names)
for a_name in attribute_names: writer.write(" %s=\"" % a_name) _write_data(writer, attrs[a_name].value) writer.write("\"") if self.childNodes: writer.write(">") if (len(self.childNodes) == 1 and self.childNodes[0].nodeType == Node.TEXT_NODE): self.childNodes[0].writexml(writer, '', '', '') self.childNodes[0].writexml(writer, '', '', '', sort=sort) else: writer.write(newl) for node in self.childNodes: node.writexml(writer, indent+addindent, addindent, newl) node.writexml(writer, indent+addindent, addindent, newl, sort=sort) writer.write(indent) writer.write("</%s>%s" % (self.tagName, newl)) else: Expand Down Expand Up @@ -984,8 +988,8 @@ def _set_nodeName(self, value): self.target = value nodeName = property(_get_nodeName, _set_nodeName)
def writexml(self, writer, indent="", addindent="", newl=""): writer.write("%s<?%s %s?>%s" % (indent,self.target, self.data, newl)) def writexml(self, writer, indent="", addindent="", newl="", sort=False): writer.write("%s<?%s %s?>%s" % (indent,self.target, self.data, newl), sort=sort)

class CharacterData(Childless, Node): Expand Down Expand Up @@ -1084,7 +1088,7 @@ def splitText(self, offset): self.data = self.data[:offset] return newText
def writexml(self, writer, indent="", addindent="", newl=""): def writexml(self, writer, indent="", addindent="", newl="", sort=False): _write_data(writer, "%s%s%s" % (indent, self.data, newl))
# DOM Level 3 (WD 9 April 2002) Expand Down Expand Up @@ -1179,10 +1183,10 @@ def __init__(self, data): CharacterData.__init__(self) self._data = data
def writexml(self, writer, indent="", addindent="", newl=""): def writexml(self, writer, indent="", addindent="", newl="", sort=False): if "--" in self.data: raise ValueError("'--' is not allowed in a comment node") writer.write("%s<!--%s-->%s" % (indent, self.data, newl)) writer.write("%s<!--%s-->%s" % (indent, self.data, newl), sort=sort)

class CDATASection(Text): Expand All @@ -1191,7 +1195,7 @@ class CDATASection(Text): nodeType = Node.CDATA_SECTION_NODE nodeName = "#cdata-section"
def writexml(self, writer, indent="", addindent="", newl=""): def writexml(self, writer, indent="", addindent="", newl="", sort=False): if self.data.find("]]>") >= 0: raise ValueError("']]>' not allowed in a CDATA section") writer.write("<![CDATA[%s]]>" % self.data) Expand Down Expand Up @@ -1324,7 +1328,7 @@ def cloneNode(self, deep): else: return None
def writexml(self, writer, indent="", addindent="", newl=""): def writexml(self, writer, indent="", addindent="", newl="", sort=False): writer.write("<!DOCTYPE ") writer.write(self.name) if self.publicId: Expand Down Expand Up @@ -1786,14 +1790,14 @@ def importNode(self, node, deep): raise xml.dom.NotSupportedErr("cannot import document type nodes") return _clone_node(node, deep, self)
def writexml(self, writer, indent="", addindent="", newl="", encoding=None): def writexml(self, writer, indent="", addindent="", newl="", encoding=None, sort=False): if encoding is None: writer.write('<?xml version="1.0" ?>'+newl) else: writer.write('<?xml version="1.0" encoding="%s"?>%s' % ( encoding, newl)) for node in self.childNodes: node.writexml(writer, indent, addindent, newl) node.writexml(writer, indent, addindent, newl, sort=sort)
# DOM Level 3 (WD 9 April 2002)
Expand Down