# HG changeset patch # User paulb # Date 1173814386 0 # Node ID ad3e17df1e84f6d13c5f14d954d4826e46bbc216 # Parent c8441afb91a47f73b53561869b2f4fb822435906 [project @ 2007-03-13 19:33:06 by paulb] Fixed previousSibling, nextSibling, parentNode using a test for the result of the underlying function providing the libxml2 result for such operations. Reintroduced node comparisons. Added a getDOMImplementation function. diff -r c8441afb91a4 -r ad3e17df1e84 libxml2dom/__init__.py --- a/libxml2dom/__init__.py Tue Mar 13 19:31:48 2007 +0000 +++ b/libxml2dom/__init__.py Tue Mar 13 19:33:06 2007 +0000 @@ -56,6 +56,12 @@ else: return Node(_node, self, context_node.ownerDocument) + def get_node_or_none(self, _node, context_node): + if _node is None: + return None + else: + return self.get_node(_node, context_node) + # Attribute and node list wrappers. class NamedNodeMap(object): @@ -219,13 +225,13 @@ return Node_localName(self._node) def _parentNode(self): - return self.impl.get_node(Node_parentNode(self._node), self) + return self.impl.get_node_or_none(Node_parentNode(self._node), self) def _previousSibling(self): - return self.impl.get_node(Node_previousSibling(self._node), self) + return self.impl.get_node_or_none(Node_previousSibling(self._node), self) def _nextSibling(self): - return self.impl.get_node(Node_nextSibling(self._node), self) + return self.impl.get_node_or_none(Node_nextSibling(self._node), self) def _doctype(self): return self.impl.get_node(Node_doctype(self._node), self) @@ -400,11 +406,14 @@ entities = {} notations = {} - #def isSameNode(self, other): - # return self._node.nodePath() == other._node.nodePath() + def isSameNode(self, other): + return self == other - #def __eq__(self, other): - # return self._node.nodePath() == other._node.nodePath() + def __eq__(self, other): + return isinstance(other, Node) and libxml2mod.xmlXPathCmpNodes(self._node, other._node) == 0 + + def __ne__(self, other): + return not (self == other) # 4DOM extensions to the usual PyXML API. # NOTE: To be finished. @@ -457,15 +466,11 @@ def _ownerDocument(self): return self - def _parentNode(self): - return None - def __del__(self): #print "Freeing document", self._node libxml2mod.xmlFreeDoc(self._node) ownerDocument = property(_ownerDocument) - parentNode = property(_parentNode) class DocumentType(object): @@ -628,6 +633,12 @@ results.append(Node(node, impl, doc)) return results +def getDOMImplementation(): + + "Return the default DOM implementation." + + return default_impl + # Single instance of the implementation. default_impl = Implementation()