Implement the encoding argument for toxml and toprettyxml.

Document toprettyxml.
This commit is contained in:
Martin v. Löwis 2002-06-30 15:05:00 +00:00
parent 2ebfd09e58
commit 7d650ca83b
5 changed files with 68 additions and 9 deletions

View file

@ -65,16 +65,22 @@ def __init__(self):
def __nonzero__(self):
return 1
def toxml(self):
writer = _get_StringIO()
self.writexml(writer)
return writer.getvalue()
def toxml(self, encoding = None):
return self.toprettyxml("", "", encoding)
def toprettyxml(self, indent="\t", newl="\n"):
def toprettyxml(self, indent="\t", newl="\n", encoding = None):
# indent = the indentation string to prepend, per level
# newl = the newline string to append
writer = _get_StringIO()
self.writexml(writer, "", indent, newl)
if encoding is not None:
import codecs
# Can't use codecs.getwriter to preserve 2.0 compatibility
writer = codecs.lookup(encoding)[3](writer)
if self.nodeType == Node.DOCUMENT_NODE:
# Can pass encoding only to document, to put it into XML header
self.writexml(writer, "", indent, newl, encoding)
else:
self.writexml(writer, "", indent, newl)
return writer.getvalue()
def hasChildNodes(self):
@ -934,8 +940,12 @@ def getElementsByTagNameNS(self, namespaceURI, localName):
return _getElementsByTagNameNSHelper(self, namespaceURI, localName,
NodeList())
def writexml(self, writer, indent="", addindent="", newl=""):
writer.write('<?xml version="1.0" ?>\n')
def writexml(self, writer, indent="", addindent="", newl="",
encoding = None):
if encoding is None:
writer.write('<?xml version="1.0" ?>\n')
else:
writer.write('<?xml version="1.0" encoding="%s"?>\n' % encoding)
for node in self.childNodes:
node.writexml(writer, indent, addindent, newl)