@@ -62,14 +62,7 @@ def removeChild(self, node):
6262node .parent = None
6363
6464def cloneNode (self ):
65- newNode = type (self )(self .name )
66- if hasattr (self ,'namespace' ):
67- newNode .namespace = self .namespace
68- if hasattr (self ,'attributes' ):
69- for attr ,value in self .attributes .iteritems ():
70- newNode .attributes [attr ]= value
71- newNode .value = self .value
72- return newNode
65+ raise NotImplementedError
7366
7467def hasContent (self ):
7568"""Return true if the node has children or text"""
@@ -112,11 +105,17 @@ def printTree(self):
112105tree += child .printTree (2 )
113106return tree
114107
108+ def cloneNode (self ):
109+ return Document ()
110+
115111class DocumentFragment (Document ):
116112type = 2
117113def __unicode__ (self ):
118114return "#document-fragment"
119115
116+ def cloneNode (self ):
117+ return DocumentFragment ()
118+
120119class DocumentType (Node ):
121120type = 3
122121def __init__ (self ,name ,publicId ,systemId ):
@@ -140,6 +139,9 @@ def __unicode__(self):
140139def hilite (self ):
141140return '<code class="markup doctype"><!DOCTYPE %s></code>' % self .name
142141
142+ def cloneNode (self ):
143+ return DocumentType (self .name ,self .publicId ,self .systemId )
144+
143145class TextNode (Node ):
144146type = 4
145147def __init__ (self ,value ):
@@ -154,6 +156,9 @@ def toxml(self):
154156
155157hilite = toxml
156158
159+ def cloneNode (self ):
160+ return TextNode (self .value )
161+
157162class Element (Node ):
158163type = 5
159164def __init__ (self ,name ,namespace = None ):
@@ -206,6 +211,12 @@ def printTree(self, indent):
206211tree += child .printTree (indent )
207212return tree
208213
214+ def cloneNode (self ):
215+ newNode = Element (self .name )
216+ for attr ,value in self .attributes .iteritems ():
217+ newNode .attributes [attr ]= value
218+ return newNode
219+
209220class CommentNode (Node ):
210221type = 6
211222def __init__ (self ,data ):
@@ -221,6 +232,9 @@ def toxml(self):
221232def hilite (self ):
222233return '<code class="markup comment"><!--%s--></code>' % escape (self .data )
223234
235+ def cloneNode (self ):
236+ return CommentNode (self .data )
237+
224238class TreeBuilder (_base .TreeBuilder ):
225239documentClass = Document
226240doctypeClass = DocumentType