Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d178ba6

Browse files
committed
Added non-ns start and end element methods.
Moved appendChild calls from DOMEventStream to PullDOM (parser indep). Removed duplicated sibling pointer setting (duplicated in appendChild).
1 parent 9361565 commit d178ba6

1 file changed

Lines changed: 31 additions & 16 deletions

File tree

Lib/xml/dom/pulldom.py

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,8 @@ def startElementNS(self, name, tagName , attrs):
5151
node.setAttributeNode(attr)
5252

5353
parent = self.curNode
54+
parent.appendChild(node)
5455
node.parentNode = parent
55-
if parent.childNodes:
56-
node.previousSibling = parent.childNodes[-1]
57-
node.previousSibling.nextSibling = node
5856
self.curNode = node
5957

6058
self.lastEvent[1] = [(START_ELEMENT, node), None]
@@ -68,44 +66,63 @@ def endElementNS(self, name, tagName):
6866
#self.events.append((END_ELEMENT, node))
6967
self.curNode = node.parentNode
7068

69+
def startElement(self, name, attrs):
70+
node = self.document.createElement(name)
71+
72+
for aname,value in attrs.items():
73+
attr = self.document.createAttribute(aname)
74+
attr.value = value
75+
node.setAttributeNode(attr)
76+
77+
parent = self.curNode
78+
parent.appendChild(node)
79+
node.parentNode = parent
80+
self.curNode = node
81+
82+
self.lastEvent[1] = [(START_ELEMENT, node), None]
83+
self.lastEvent = self.lastEvent[1]
84+
#self.events.append((START_ELEMENT, node))
85+
86+
def endElement(self, name):
87+
node = self.curNode
88+
self.lastEvent[1] = [(END_ELEMENT, node), None]
89+
self.lastEvent = self.lastEvent[1]
90+
#self.events.append((END_ELEMENT, node))
91+
self.curNode = node.parentNode
92+
7193
def comment(self, s):
7294
node = self.document.createComment(s)
7395
parent = self.curNode
96+
parent.appendChild(node)
7497
node.parentNode = parent
75-
if parent.childNodes:
76-
node.previousSibling = parent.childNodes[-1]
77-
node.previousSibling.nextSibling = node
7898
self.lastEvent[1] = [(COMMENT, node), None]
7999
self.lastEvent = self.lastEvent[1]
80100
#self.events.append((COMMENT, node))
81101

82102
def processingInstruction(self, target, data):
83103
node = self.document.createProcessingInstruction(target, data)
84-
#self.appendChild(node)
85104

86105
parent = self.curNode
106+
parent.appendChild(node)
87107
node.parentNode = parent
88-
if parent.childNodes:
89-
node.previousSibling = parent.childNodes[-1]
90-
node.previousSibling.nextSibling = node
91108
self.lastEvent[1] = [(PROCESSING_INSTRUCTION, node), None]
92109
self.lastEvent = self.lastEvent[1]
93110
#self.events.append((PROCESSING_INSTRUCTION, node))
94111

95112
def ignorableWhitespace(self, chars):
96113
node = self.document.createTextNode(chars[start:start + length])
97114
parent = self.curNode
115+
parent.appendChild(node)
98116
node.parentNode = parent
99-
if parent.childNodes:
100-
node.previousSibling = parent.childNodes[-1]
101-
node.previousSibling.nextSibling = node
102117
self.lastEvent[1] = [(IGNORABLE_WHITESPACE, node), None]
103118
self.lastEvent = self.lastEvent[1]
104119
#self.events.append((IGNORABLE_WHITESPACE, node))
105120

106121
def characters(self, chars):
107122
node = self.document.createTextNode(chars)
108-
node.parentNode = self.curNode
123+
parent = self.curNode
124+
parent.appendChild(node)
125+
node.parentNode = parent
109126
self.lastEvent[1] = [(CHARACTERS, node), None]
110127
self.lastEvent = self.lastEvent[1]
111128

@@ -160,8 +177,6 @@ def expandNode(self, node):
160177
token, cur_node = event
161178
if cur_node is node:
162179
return
163-
if token != END_ELEMENT:
164-
cur_node.parentNode.appendChild(cur_node)
165180
event = self.getEvent()
166181

167182
def getEvent(self):

0 commit comments

Comments
 (0)