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:
Fred Drake 2001-09-28 04:33:06 +00:00
parent 2ed6bf87c9
commit 3ac6a09eed
1 changed files with 19 additions and 2 deletions

View File

@ -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))