def __init__(self):
self.childNodes = []
+ self.parentNode = None
if Node._debug:
index = repr(id(self)) + repr(self.__class__)
Node.allnodes[index] = repr(self.__dict__)
return self.childNodes[-1]
def insertBefore(self, newChild, refChild):
+ if newChild.parentNode is not None:
+ newChild.parentNode.removeChild(newChild)
if refChild is None:
self.appendChild(newChild)
else:
return newChild
def appendChild(self, node):
+ if node.parentNode is not None:
+ node.parentNode.removeChild(node)
if self.childNodes:
last = self.lastChild
node.previousSibling = last
return node
def replaceChild(self, newChild, oldChild):
+ if newChild.parentNode is not None:
+ newChild.parentNode.removeChild(newChild)
if newChild is oldChild:
return
index = self.childNodes.index(oldChild)
def removeChild(self, oldChild):
self.childNodes.remove(oldChild)
+ if oldChild.nextSibling is not None:
+ oldChild.nextSibling.previousSibling = oldChild.previousSibling
+ if oldChild.previousSibling is not None:
+ oldChild.previousSibling.nextSibling = oldChild.nextSibling
+ oldChild.nextSibling = oldChild.previousSibling = None
+
if self._makeParentNodes:
oldChild.parentNode = None
return oldChild
implementation = DOMImplementation()
def appendChild(self, node):
+ if node.parentNode is not None:
+ node.parentNode.removeChild(node)
+
if node.nodeType == Node.ELEMENT_NODE \
and self._get_documentElement():
raise TypeError, "two document elements disallowed"
return Node.appendChild(self, node)
+ def removeChild(self, oldChild):
+ self.childNodes.remove(oldChild)
+ oldChild.nextSibling = oldChild.previousSibling = None
+ oldChild.parentNode = None
+ if self.documentElement is oldChild:
+ self.documentElement = None
+
+ return oldChild
+
def _get_documentElement(self):
for node in self.childNodes:
if node.nodeType == Node.ELEMENT_NODE:
attr.value = value
node.setAttributeNode(attr)
- node.parentNode = self.curNode
+## print self.curNode, self.curNode.childNodes, node, node.parentNode
+ self.curNode.appendChild(node)
+# node.parentNode = self.curNode
self.curNode = node
self.lastEvent[1] = [(START_ELEMENT, node), None]
attr.value = value
node.setAttributeNode(attr)
- node.parentNode = self.curNode
+ #node.parentNode = self.curNode
+ self.curNode.appendChild(node)
self.curNode = node
self.lastEvent[1] = [(START_ELEMENT, node), None]
def comment(self, s):
node = self.document.createComment(s)
- parent = self.curNode
- node.parentNode = parent
+ self.curNode.appendChild(node)
+# parent = self.curNode
+# node.parentNode = parent
self.lastEvent[1] = [(COMMENT, node), None]
self.lastEvent = self.lastEvent[1]
#self.events.append((COMMENT, node))
def processingInstruction(self, target, data):
node = self.document.createProcessingInstruction(target, data)
- parent = self.curNode
- node.parentNode = parent
+ self.curNode.appendChild(node)
+# parent = self.curNode
+# node.parentNode = parent
self.lastEvent[1] = [(PROCESSING_INSTRUCTION, node), None]
self.lastEvent = self.lastEvent[1]
#self.events.append((PROCESSING_INSTRUCTION, node))
def ignorableWhitespace(self, chars):
node = self.document.createTextNode(chars)
- parent = self.curNode
- node.parentNode = parent
+ self.curNode.appendChild(node)
+# parent = self.curNode
+# node.parentNode = parent
self.lastEvent[1] = [(IGNORABLE_WHITESPACE, node), None]
self.lastEvent = self.lastEvent[1]
#self.events.append((IGNORABLE_WHITESPACE, node))
def characters(self, chars):
node = self.document.createTextNode(chars)
- parent = self.curNode
- node.parentNode = parent
+ self.curNode.appendChild(node)
+# parent = self.curNode
+# node.parentNode = parent
self.lastEvent[1] = [(CHARACTERS, node), None]
self.lastEvent = self.lastEvent[1]