|
@@ -2529,6 +2529,24 @@ else:
|
|
el.text = el.text.decode('utf-8')
|
|
el.text = el.text.decode('utf-8')
|
|
return doc
|
|
return doc
|
|
|
|
|
|
|
|
+if hasattr(etree, 'register_namespace'):
|
|
|
|
+ compat_etree_register_namespace = etree.register_namespace
|
|
|
|
+else:
|
|
|
|
+ def compat_etree_register_namespace(prefix, uri):
|
|
|
|
+ """Register a namespace prefix.
|
|
|
|
+ The registry is global, and any existing mapping for either the
|
|
|
|
+ given prefix or the namespace URI will be removed.
|
|
|
|
+ *prefix* is the namespace prefix, *uri* is a namespace uri. Tags and
|
|
|
|
+ attributes in this namespace will be serialized with prefix if possible.
|
|
|
|
+ ValueError is raised if prefix is reserved or is invalid.
|
|
|
|
+ """
|
|
|
|
+ if re.match(r"ns\d+$", prefix):
|
|
|
|
+ raise ValueError("Prefix format reserved for internal use")
|
|
|
|
+ for k, v in list(etree._namespace_map.items()):
|
|
|
|
+ if k == uri or v == prefix:
|
|
|
|
+ del etree._namespace_map[k]
|
|
|
|
+ etree._namespace_map[uri] = prefix
|
|
|
|
+
|
|
if sys.version_info < (2, 7):
|
|
if sys.version_info < (2, 7):
|
|
# Here comes the crazy part: In 2.6, if the xpath is a unicode,
|
|
# Here comes the crazy part: In 2.6, if the xpath is a unicode,
|
|
# .//node does not match if a node is a direct child of . !
|
|
# .//node does not match if a node is a direct child of . !
|