summaryrefslogtreecommitdiffstats
path: root/Lib/xml/dom
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/xml/dom')
-rw-r--r--Lib/xml/dom/minidom.py25
-rw-r--r--Lib/xml/dom/pulldom.py27
2 files changed, 42 insertions, 10 deletions
diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 2d3755c..d078f39 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -40,6 +40,7 @@ class Node(_Node):
def __init__(self):
self.childNodes = []
+ self.parentNode = None
if Node._debug:
index = repr(id(self)) + repr(self.__class__)
Node.allnodes[index] = repr(self.__dict__)
@@ -98,6 +99,8 @@ class Node(_Node):
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:
@@ -116,6 +119,8 @@ class Node(_Node):
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
@@ -129,6 +134,8 @@ class Node(_Node):
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)
@@ -144,6 +151,12 @@ class Node(_Node):
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
@@ -606,11 +619,23 @@ class Document(Node):
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:
diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py
index e674385..7f5ef79 100644
--- a/Lib/xml/dom/pulldom.py
+++ b/Lib/xml/dom/pulldom.py
@@ -55,7 +55,9 @@ class PullDOM(xml.sax.ContentHandler):
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]
@@ -77,7 +79,8 @@ class PullDOM(xml.sax.ContentHandler):
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]
@@ -93,8 +96,9 @@ class PullDOM(xml.sax.ContentHandler):
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))
@@ -102,24 +106,27 @@ class PullDOM(xml.sax.ContentHandler):
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]