# HG changeset patch # User paulb # Date 1191105264 0 # Node ID cd8ccc2f9e32a27e994e6549b63f289db5b76111 # Parent 03817ecc20ede30c98aadc0c5b8e6a986673b911 [project @ 2007-09-29 22:34:24 by paulb] Added retrieval of namespace nodes having the standard XML_NAMESPACE value. Introduced deletion of conflicting attributes in setAttributeNS. Added slightly nicer errors for parsing and serialising. diff -r 03817ecc20ed -r cd8ccc2f9e32 libxml2dom/macrolib/macrolib.py --- a/libxml2dom/macrolib/macrolib.py Fri Jun 20 21:46:24 2008 +0200 +++ b/libxml2dom/macrolib/macrolib.py Sat Sep 29 22:34:24 2007 +0000 @@ -85,6 +85,11 @@ and 'prefix'. """ + # Special treatment for XML namespace. + + if prefix == "xml" and ns == xml.dom.XML_NAMESPACE: + return libxml2mod.xmlSearchNsByHref(Node_ownerDocument(node), node, xml.dom.XML_NAMESPACE) + new_ns = None current = libxml2mod.xmlNodeGetNsDefs(node) while current is not None: @@ -323,6 +328,9 @@ if prefix is None: prefix = _get_invented_prefix(node, ns) new_ns = _make_namespace(node, ns, prefix, set_default=0) + # Remove any conflicting attribute. + if Node_hasAttributeNS(node, ns, localName): + Node_removeAttributeNS(node, ns, localName) libxml2mod.xmlSetNsProp(node, new_ns, localName, value) else: # NOTE: Needs verifying: what should happen to the namespace? @@ -504,6 +512,18 @@ PARSE_ERR = 81 SERIALIZE_ERR = 82 + def __repr__(self): + return str(self) + + def __str__(self): + exctype = self.args[0] + if exctype == self.PARSE_ERR: + return "Parse error: LSException(%d)" % exctype + elif exctype == self.SERIALIZE_ERR: + return "Serialize error: LSException(%d)" % exctype + else: + return Exception.__repr__(self) + # Utility functions. def createDocument(namespaceURI, localName, doctype):