@@ -200,8 +200,15 @@ def __init__(self):
200
200
def testSerializer (element ):
201
201
rv = []
202
202
203
- def serializeElement (element , indent = 0 ):
204
- if not (hasattr (element , "tag" )):
203
+ stack = [(element , 0 )]
204
+
205
+ while stack :
206
+ element , indent = stack .pop ()
207
+ if isinstance (element , text_type ):
208
+ rv .append (element )
209
+ continue
210
+
211
+ if not (hasattr (element , "tag" )):
205
212
element = element .getroot ()
206
213
if element .tag == "<!DOCTYPE>" :
207
214
if element .get ("publicId" ) or element .get ("systemId" ):
@@ -249,13 +256,12 @@ def serializeElement(element, indent=0):
249
256
for name , value in sorted (attributes ):
250
257
rv .append ('|%s%s="%s"' % (' ' * (indent + 2 ), name , value ))
251
258
if element .text :
252
- rv .append ("|%s\" %s\" " % (' ' * (indent + 2 ), element .text ))
253
- indent += 2
254
- for child in element :
255
- serializeElement (child , indent )
259
+ rv .append ('|%s"%s"' % (" " * (indent + 2 ), element .text ))
256
260
if element .tail :
257
- rv .append ("|%s\" %s\" " % (' ' * (indent - 2 ), element .tail ))
258
- serializeElement (element , 0 )
261
+ stack .append (('|%s"%s"' % (" " * (indent ), element .tail ), None ))
262
+ indent += 2
263
+ for child in reversed (element ):
264
+ stack .append ((child , indent ))
259
265
260
266
return "\n " .join (rv )
261
267
0 commit comments