@@ -65,16 +65,22 @@ def __init__(self):
6565 def __nonzero__ (self ):
6666 return 1
6767
68- def toxml (self ):
69- writer = _get_StringIO ()
70- self .writexml (writer )
71- return writer .getvalue ()
68+ def toxml (self , encoding = None ):
69+ return self .toprettyxml ("" , "" , encoding )
7270
73- def toprettyxml (self , indent = "\t " , newl = "\n " ):
71+ def toprettyxml (self , indent = "\t " , newl = "\n " , encoding = None ):
7472 # indent = the indentation string to prepend, per level
7573 # newl = the newline string to append
7674 writer = _get_StringIO ()
77- self .writexml (writer , "" , indent , newl )
75+ if encoding is not None :
76+ import codecs
77+ # Can't use codecs.getwriter to preserve 2.0 compatibility
78+ writer = codecs .lookup (encoding )[3 ](writer )
79+ if self .nodeType == Node .DOCUMENT_NODE :
80+ # Can pass encoding only to document, to put it into XML header
81+ self .writexml (writer , "" , indent , newl , encoding )
82+ else :
83+ self .writexml (writer , "" , indent , newl )
7884 return writer .getvalue ()
7985
8086 def hasChildNodes (self ):
@@ -934,8 +940,12 @@ def getElementsByTagNameNS(self, namespaceURI, localName):
934940 return _getElementsByTagNameNSHelper (self , namespaceURI , localName ,
935941 NodeList ())
936942
937- def writexml (self , writer , indent = "" , addindent = "" , newl = "" ):
938- writer .write ('<?xml version="1.0" ?>\n ' )
943+ def writexml (self , writer , indent = "" , addindent = "" , newl = "" ,
944+ encoding = None ):
945+ if encoding is None :
946+ writer .write ('<?xml version="1.0" ?>\n ' )
947+ else :
948+ writer .write ('<?xml version="1.0" encoding="%s"?>\n ' % encoding )
939949 for node in self .childNodes :
940950 node .writexml (writer , indent , addindent , newl )
941951
0 commit comments