# HG changeset patch # User paulb # Date 1134383735 0 # Node ID 09bdcf4680eb879754f268f032c142432e703004 # Parent 9c605a58b1dbd3807b8c4f88f0a4f60e11d5d4c2 [project @ 2005-12-12 10:35:35 by paulb] Improved xmlns attribute controls, suppressing xmlns:xmlns creation. Updated release information. diff -r 9c605a58b1db -r 09bdcf4680eb libxml2dom/macrolib/__init__.py --- a/libxml2dom/macrolib/__init__.py Mon Dec 12 10:35:07 2005 +0000 +++ b/libxml2dom/macrolib/__init__.py Mon Dec 12 10:35:35 2005 +0000 @@ -2,7 +2,7 @@ "DOM macro library for libxml2." -__version__ = "0.3.1" +__version__ = "0.3.2" # Expose all functions here. diff -r 9c605a58b1db -r 09bdcf4680eb libxml2dom/macrolib/macrolib.py --- a/libxml2dom/macrolib/macrolib.py Mon Dec 12 10:35:07 2005 +0000 +++ b/libxml2dom/macrolib/macrolib.py Mon Dec 12 10:35:35 2005 +0000 @@ -211,9 +211,17 @@ def Node_setAttributeNS(node, ns, name, value): ns, name, value = map(from_unicode, [ns, name, value]) prefix, localName = _get_prefix_and_localName(name) - if ns is not None: - if prefix == "xmlns" and ns == xml.dom.XMLNS_NAMESPACE and _find_namespace(node, value, localName): + + # Detect setting of xmlns:localName=value, looking for cases where + # x:attr=value have caused the definition of xmlns:x=y (as a declaration + # with prefix=x, ns=y). + if prefix == "xmlns" and ns == xml.dom.XMLNS_NAMESPACE: + if _find_namespace(node, value, localName): return + new_ns = _make_namespace(node, value, localName, set_default=0) + # For non-xmlns attributes, we find or make a namespace declaration and then + # set an attribute. + elif ns is not None: new_ns = _find_namespace(node, ns, prefix) if new_ns is None: new_ns = _make_namespace(node, ns, prefix, set_default=0)