From 3ac6a09eed70b5ebff9200a22e0ff7f010b36d0d Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Fri, 28 Sep 2001 04:33:06 +0000 Subject: [PATCH] For Python 2.2 and newer, actually support the full NodeList interface by subclassing list to add the length and item() attributes. --- Lib/xml/dom/minidom.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py index 9db9ec1f01a..18b0e270de6 100644 --- a/Lib/xml/dom/minidom.py +++ b/Lib/xml/dom/minidom.py @@ -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))