bpo-34160: Add the sort attribute to the xml.dom.minidom.Node.writexml method by matrixise · Pull Request #12354 · python/cpython (original) (raw)
@@ -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:
@@ -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" % (indent,self.target, self.data, newl))
def writexml(self, writer, indent="", addindent="", newl="", sort=False):
writer.write("%s%s" % (indent,self.target, self.data, newl), sort=sort)
class CharacterData(Childless, Node):
@@ -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)
@@ -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" % (indent, self.data, newl))
writer.write("%s%s" % (indent, self.data, newl), sort=sort)
class CDATASection(Text):
@@ -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)
@@ -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:
@@ -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(''+newl)
else:
writer.write('%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)