# HG changeset patch # User Paul Boddie # Date 1221174236 -7200 # Node ID 0a2899d30aa933172a52bfa73ca1966996e72801 # Parent 96756a26d72084136088edb6319b63687c24920e Fixed the add_or_replace_element method to only replace elements having the same name. Added more properties, especially around parameters. Renamed value to valueElement and data to dataElement in various cases in order to preserve the underlying properties. diff -r 96756a26d720 -r 0a2899d30aa9 README.txt --- a/README.txt Wed Sep 10 00:35:11 2008 +0200 +++ b/README.txt Fri Sep 12 01:03:56 2008 +0200 @@ -12,6 +12,8 @@ specifications. Instead, you should now use the textContent property to get such data. +From libxml2dom 0.5, some XML-RPC nodes employ different properties. + Contact, Copyright and Licence Information ------------------------------------------ @@ -65,6 +67,14 @@ libxml2dom.macrolib implementation, too). A way is needed to get libxml2 to do the node copying itself. +New in libxml2dom 0.5 (Changes since libxml2dom 0.4.7) +------------------------------------------------------ + + * Changed some XML-RPC node properties in order to retain underlying DOM + properties such as value and data. + * Added convenience methods to the XML-RPC implementation, with combined + node creation and insertion if requested. + New in libxml2dom 0.4.7 (Changes since libxml2dom 0.4.6) -------------------------------------------------------- diff -r 96756a26d720 -r 0a2899d30aa9 libxml2dom/xmlrpc.py --- a/libxml2dom/xmlrpc.py Wed Sep 10 00:35:11 2008 +0200 +++ b/libxml2dom/xmlrpc.py Fri Sep 12 01:03:56 2008 +0200 @@ -41,7 +41,7 @@ "Convenience modifications to nodes specific to libxml2dom.xmlrpc." def add_or_replace_element(self, new_element): - elements = self.xpath("*") + elements = self.xpath(new_element.localName) if elements: self.replaceChild(new_element, elements[0]) else: @@ -90,6 +90,9 @@ def _fault(self): return (self.xpath("./fault") or [None])[0] + def _params(self): + return (self.xpath("./params") or [None])[0] + def _methodNameElement(self): return (self.xpath("./methodName") or [None])[0] @@ -109,6 +112,9 @@ def _parameterValues(self): return [value.container.contents for value in self.xpath("./params/param/value")] + def _parameters(self): + return self.xpath("./params/param") + # Node construction methods. def createMethodName(self, insert=0): @@ -130,14 +136,19 @@ return e fault = property(_fault) + params = property(_params) methodNameElement = property(_methodNameElement) methodName = property(_methodName, _setMethodName) parameterValues = property(_parameterValues) + parameters = property(_parameters) class XMLRPCParametersElement(XMLRPCNode): "An XML-RPC parameters/params element." + def _parameters(self): + return self.xpath("./param") + # Node construction methods. def createParameter(self, insert=0): @@ -146,10 +157,15 @@ self.appendChild(e) return e + parameters = property(_parameters) + class XMLRPCParameterElement(XMLRPCNode): "An XML-RPC parameter/param element." + def _valueElement(self): + return (self.xpath("./value") or [None])[0] + # Node construction methods. def createValue(self, typename=None, insert=0): @@ -161,11 +177,13 @@ self.add_or_replace_element(value) return value + valueElement = property(_valueElement) + class XMLRPCArrayElement(XMLRPCNode): "An XML-RPC array element." - def _data(self): + def _dataElement(self): return (self.xpath("./data") or [None])[0] def _contents(self): @@ -199,7 +217,7 @@ self.add_or_replace_element(e) return e - data = property(_data) + dataElement = property(_dataElement) contents = property(_contents) class XMLRPCStructElement(XMLRPCNode): @@ -266,7 +284,7 @@ "An XML-RPC structure member element." - def _value(self): + def _valueElement(self): return (self.xpath("./value") or [None])[0] def _nameElement(self): @@ -312,9 +330,9 @@ self.add_or_replace_element(e) return e - value = property(_value) nameElement = property(_nameElement) memberName = property(_memberName, _setMemberName) + valueElement = property(_valueElement) contents = property(_contents) class XMLRPCStringElement(XMLRPCNode):