mirror of https://github.com/python/cpython.git
For Python 2.2 and newer, actually support the full NodeList interface by
subclassing list to add the length and item() attributes.
This commit is contained in:
parent
2ed6bf87c9
commit
3ac6a09eed
|
@ -32,6 +32,23 @@
|
|||
import xml.dom
|
||||
_Node = xml.dom.Node
|
||||
|
||||
|
||||
if list is type([]):
|
||||
class NodeList(list):
|
||||
def item(self, index):
|
||||
if 0 <= index < len(self):
|
||||
return self[index]
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name == "length":
|
||||
return len(self)
|
||||
raise AttributeError, name
|
||||
|
||||
else:
|
||||
def NodeList():
|
||||
return []
|
||||
|
||||
|
||||
class Node(_Node):
|
||||
allnodes = {}
|
||||
_debug = 0
|
||||
|
@ -41,7 +58,7 @@ class Node(_Node):
|
|||
namespaceURI = None # this is non-null only for elements and attributes
|
||||
|
||||
def __init__(self):
|
||||
self.childNodes = []
|
||||
self.childNodes = NodeList()
|
||||
self.parentNode = self.ownerDocument = None
|
||||
if Node._debug:
|
||||
index = repr(id(self)) + repr(self.__class__)
|
||||
|
@ -234,7 +251,7 @@ def cloneNode(self, deep):
|
|||
clone = new.instance(self.__class__, self.__dict__.copy())
|
||||
if self._makeParentNodes:
|
||||
clone.parentNode = None
|
||||
clone.childNodes = []
|
||||
clone.childNodes = NodeList()
|
||||
if deep:
|
||||
for child in self.childNodes:
|
||||
clone.appendChild(child.cloneNode(1))
|
||||
|
|
Loading…
Reference in New Issue