mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
give minidom.py behaviour that complies with the DOM Level 1 REC, which says that when a node newChild is added to the tree, "if the newChild is already in the tree, it is first removed." pulldom.py is patched to use the public minidom interface instead of setting .parentNode itself. Possibly this reduces pulldom's efficiency; someone else will have to pronounce on that.
This commit is contained in:
parent
34c20cf705
commit
04a45e9bb1
2 changed files with 42 additions and 10 deletions
|
@ -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]
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue