@@ -13,11 +13,6 @@ def __init__(self, name):
13
13
self ._childNodes = []
14
14
self ._flags = []
15
15
16
- #Set the element text and tail to the empty string rather than None
17
- #XXX - is this desirable or should we do it on a case by case basis?
18
- self ._element .text = ""
19
- self ._element .tail = ""
20
-
21
16
def _setName (self , name ):
22
17
self ._element .tag = name
23
18
@@ -70,17 +65,25 @@ def removeChild(self, node):
70
65
71
66
def insertText (self , data , insertBefore = None ):
72
67
if not (len (self ._element )):
68
+ if not self ._element .text :
69
+ self ._element .text = ""
73
70
self ._element .text += data
74
71
elif insertBefore is None :
75
72
#Insert the text as the tail of the last child element
73
+ if not self ._element [- 1 ].tail :
74
+ self ._element [- 1 ].tail = ""
76
75
self ._element [- 1 ].tail += data
77
76
else :
78
77
#Insert the text before the specified node
79
78
children = self ._element .getchildren ()
80
79
index = children .index (insertBefore ._element )
81
80
if index > 0 :
81
+ if not self ._element [index - 1 ].tail :
82
+ self ._element [index - 1 ].tail = ""
82
83
self ._element [index - 1 ].tail += data
83
84
else :
85
+ if not self ._element .text :
86
+ self ._element .text = ""
84
87
self ._element .text += data
85
88
86
89
def cloneNode (self ):
@@ -92,14 +95,19 @@ def reparentChildren(self, newParent):
92
95
if newParent .childNodes :
93
96
newParent .childNodes [- 1 ]._element .tail += self ._element .text
94
97
else :
95
- newParent ._element .text += self ._element .text
98
+ if not newParent ._element .text :
99
+ newParent ._element .text = ""
100
+ if self ._element .text is not None :
101
+ newParent ._element .text += self ._element .text
96
102
self ._element .text = ""
97
103
_base .Node .reparentChildren (self , newParent )
98
104
99
105
class Comment (Element ):
100
106
def __init__ (self , data ):
101
- Element .__init__ (self , Comment )
102
- self ._element .text = data
107
+ #Use the superclass constructor to set all properties on the
108
+ #wrapper element
109
+ Element .__init__ (self , None )
110
+ self ._element = ElementTree .Comment (data )
103
111
104
112
def _getData (self ):
105
113
return self ._element .text
@@ -130,7 +138,7 @@ def serializeElement(element, indent=0):
130
138
rv .append ("|%s\" %s\" " % (' ' * (indent + 2 ), element .text ))
131
139
if element .tail :
132
140
finalText = element .tail
133
- elif element .tag is Comment :
141
+ elif element .tag is ElementTree . Comment :
134
142
rv .append ("|%s<!-- %s -->" % (' ' * indent , element .text ))
135
143
else :
136
144
rv .append ("|%s<%s>" % (' ' * indent , element .tag ))
@@ -167,7 +175,7 @@ def serializeElement(element):
167
175
for child in element .getchildren ():
168
176
serializeElement (child )
169
177
170
- elif element .tag is Comment :
178
+ elif element .tag is ElementTree . Comment :
171
179
rv .append ("<!--%s-->" % (element .text ,))
172
180
else :
173
181
#This is assumed to be an ordinary element
@@ -195,7 +203,7 @@ def serializeElement(element):
195
203
196
204
return "" .join (rv )
197
205
198
- class TreeBuilder (_base .TreeBuilder ):
206
+ class TreeBuilderFull (_base .TreeBuilder ):
199
207
documentClass = Document
200
208
doctypeClass = DocumentType
201
209
elementClass = Element
@@ -206,3 +214,7 @@ def testSerializer(self, element):
206
214
207
215
def getDocument (self ):
208
216
return self .document ._element
217
+
218
+ class TreeBuilder (TreeBuilderFull ):
219
+ def getDocument (self ):
220
+ return self .document ._element .find ("html" )
0 commit comments