|
|
@@ -55,13 +55,10 @@ except: |
|
|
|
class XMLNS: |
|
|
|
BASE = "http://www.w3.org/2000/xmlns/" |
|
|
|
XML = "http://www.w3.org/XML/1998/namespace" |
|
|
|
try: |
|
|
|
import cStringIO |
|
|
|
StringIO = cStringIO |
|
|
|
except ImportError: |
|
|
|
import StringIO |
|
|
|
|
|
|
|
_attrs = lambda E: (E.attributes and E.attributes.values()) or [] |
|
|
|
import io |
|
|
|
|
|
|
|
_attrs = lambda E: (E.attributes and list(E.attributes.values())) or [] |
|
|
|
_children = lambda E: E.childNodes or [] |
|
|
|
_IN_XML_NS = lambda n: n.name.startswith("xmlns") |
|
|
|
_inclusive = lambda n: n.unsuppressedPrefixes is None |
|
|
@@ -69,7 +66,7 @@ _inclusive = lambda n: n.unsuppressedPrefixes is None |
|
|
|
|
|
|
|
# Does a document/PI has lesser/greater document order than the |
|
|
|
# first element? |
|
|
|
_LesserElement, _Element, _GreaterElement = range(3) |
|
|
|
_LesserElement, _Element, _GreaterElement = list(range(3)) |
|
|
|
|
|
|
|
|
|
|
|
def _sorter(n1, n2): |
|
|
@@ -191,7 +188,7 @@ class _implementation: |
|
|
|
canonicalization.''' |
|
|
|
|
|
|
|
# Collect the initial list of xml:foo attributes. |
|
|
|
xmlattrs = filter(_IN_XML_NS, _attrs(node)) |
|
|
|
xmlattrs = list(filter(_IN_XML_NS, _attrs(node))) |
|
|
|
|
|
|
|
# Walk up and get all xml:XXX attributes we inherit. |
|
|
|
inherited, parent = [], node.parentNode |
|
|
@@ -367,7 +364,7 @@ class _implementation: |
|
|
|
|
|
|
|
# Create list of NS attributes to render. |
|
|
|
ns_to_render = [] |
|
|
|
for n, v in ns_local.items(): |
|
|
|
for n, v in list(ns_local.items()): |
|
|
|
|
|
|
|
# If default namespace is XMLNS.BASE or empty, |
|
|
|
# and if an ancestor was the same |
|
|
@@ -384,7 +381,7 @@ class _implementation: |
|
|
|
|
|
|
|
# If not previously rendered |
|
|
|
# and it's inclusive or utilized |
|
|
|
if (n, v) not in ns_rendered.items(): |
|
|
|
if (n, v) not in list(ns_rendered.items()): |
|
|
|
if inclusive or _utilized(n, node, other_attrs, self.unsuppressedPrefixes): |
|
|
|
ns_to_render.append((n, v)) |
|
|
|
elif not inclusive: |
|
|
@@ -400,9 +397,9 @@ class _implementation: |
|
|
|
# Else, add all local and ancestor xml attributes |
|
|
|
# Sort and render the attributes. |
|
|
|
if not inclusive or _in_subset(self.subset, node.parentNode): # 0426 |
|
|
|
other_attrs.extend(xml_attrs_local.values()) |
|
|
|
other_attrs.extend(list(xml_attrs_local.values())) |
|
|
|
else: |
|
|
|
other_attrs.extend(xml_attrs.values()) |
|
|
|
other_attrs.extend(list(xml_attrs.values())) |
|
|
|
other_attrs.sort(_sorter) |
|
|
|
for a in other_attrs: |
|
|
|
self._do_attr(a.nodeName, a.value) |
|
|
@@ -435,8 +432,8 @@ def Canonicalize(node, output=None, **kw): |
|
|
|
prefixes that should be inherited. |
|
|
|
''' |
|
|
|
if output: |
|
|
|
apply(_implementation, (node, output.write), kw) |
|
|
|
_implementation(*(node, output.write), **kw) |
|
|
|
else: |
|
|
|
s = StringIO.StringIO() |
|
|
|
apply(_implementation, (node, s.write), kw) |
|
|
|
_implementation(*(node, s.write), **kw) |
|
|
|
return s.getvalue() |