@@ -1270,91 +1270,91 @@ if 1: | |||
if 1: | |||
def _clone_node(node, deep, newOwnerDocument): | |||
""" | |||
Clone a node and give it the new owner document. | |||
Called by Node.cloneNode and Document.importNode | |||
""" | |||
if node.ownerDocument.isSameNode(newOwnerDocument): | |||
operation = xml.dom.UserDataHandler.NODE_CLONED | |||
else: | |||
operation = xml.dom.UserDataHandler.NODE_IMPORTED | |||
if node.nodeType == xml.dom.minidom.Node.ELEMENT_NODE: | |||
clone = newOwnerDocument.createElementNS(node.namespaceURI, | |||
node.nodeName) | |||
for attr in node.attributes.values(): | |||
clone.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.value) | |||
prefix, tag = xml.dom.minidom._nssplit(attr.nodeName) | |||
if prefix == 'xmlns': | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, tag) | |||
elif prefix: | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, tag) | |||
else: | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, attr.nodeName) | |||
a.specified = attr.specified | |||
if deep: | |||
for child in node.childNodes: | |||
c = xml.dom.minidom._clone_node(child, deep, newOwnerDocument) | |||
clone.appendChild(c) | |||
elif node.nodeType == xml.dom.minidom.Node.DOCUMENT_FRAGMENT_NODE: | |||
clone = newOwnerDocument.createDocumentFragment() | |||
if deep: | |||
for child in node.childNodes: | |||
c = xml.dom.minidom._clone_node(child, deep, newOwnerDocument) | |||
clone.appendChild(c) | |||
elif node.nodeType == xml.dom.minidom.Node.TEXT_NODE: | |||
clone = newOwnerDocument.createTextNode(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.CDATA_SECTION_NODE: | |||
clone = newOwnerDocument.createCDATASection(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE: | |||
clone = newOwnerDocument.createProcessingInstruction(node.target, | |||
node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.COMMENT_NODE: | |||
clone = newOwnerDocument.createComment(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.ATTRIBUTE_NODE: | |||
clone = newOwnerDocument.createAttributeNS(node.namespaceURI, | |||
node.nodeName) | |||
clone.specified = True | |||
clone.value = node.value | |||
elif node.nodeType == xml.dom.minidom.Node.DOCUMENT_TYPE_NODE: | |||
assert node.ownerDocument is not newOwnerDocument | |||
operation = xml.dom.UserDataHandler.NODE_IMPORTED | |||
clone = newOwnerDocument.implementation.createDocumentType( | |||
node.name, node.publicId, node.systemId) | |||
clone.ownerDocument = newOwnerDocument | |||
if deep: | |||
clone.entities._seq = [] | |||
clone.notations._seq = [] | |||
for n in node.notations._seq: | |||
notation = xml.dom.minidom.Notation(n.nodeName, n.publicId, n.systemId) | |||
notation.ownerDocument = newOwnerDocument | |||
clone.notations._seq.append(notation) | |||
if hasattr(n, '_call_user_data_handler'): | |||
n._call_user_data_handler(operation, n, notation) | |||
for e in node.entities._seq: | |||
entity = xml.dom.minidom.Entity(e.nodeName, e.publicId, e.systemId, | |||
e.notationName) | |||
entity.actualEncoding = e.actualEncoding | |||
entity.encoding = e.encoding | |||
entity.version = e.version | |||
entity.ownerDocument = newOwnerDocument | |||
clone.entities._seq.append(entity) | |||
if hasattr(e, '_call_user_data_handler'): | |||
e._call_user_data_handler(operation, n, entity) | |||
else: | |||
# Note the cloning of Document and DocumentType nodes is | |||
# implemenetation specific. minidom handles those cases | |||
# directly in the cloneNode() methods. | |||
raise xml.dom.NotSupportedErr("Cannot clone node %s" % repr(node)) | |||
# Check for _call_user_data_handler() since this could conceivably | |||
# used with other DOM implementations (one of the FourThought | |||
# DOMs, perhaps?). | |||
if hasattr(node, '_call_user_data_handler'): | |||
node._call_user_data_handler(operation, node, clone) | |||
return clone | |||
""" | |||
Clone a node and give it the new owner document. | |||
Called by Node.cloneNode and Document.importNode | |||
""" | |||
if node.ownerDocument.isSameNode(newOwnerDocument): | |||
operation = xml.dom.UserDataHandler.NODE_CLONED | |||
else: | |||
operation = xml.dom.UserDataHandler.NODE_IMPORTED | |||
if node.nodeType == xml.dom.minidom.Node.ELEMENT_NODE: | |||
clone = newOwnerDocument.createElementNS(node.namespaceURI, | |||
node.nodeName) | |||
for attr in node.attributes.values(): | |||
clone.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.value) | |||
prefix, tag = xml.dom.minidom._nssplit(attr.nodeName) | |||
if prefix == 'xmlns': | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, tag) | |||
elif prefix: | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, tag) | |||
else: | |||
a = clone.getAttributeNodeNS(attr.namespaceURI, attr.nodeName) | |||
a.specified = attr.specified | |||
if deep: | |||
for child in node.childNodes: | |||
c = xml.dom.minidom._clone_node(child, deep, newOwnerDocument) | |||
clone.appendChild(c) | |||
elif node.nodeType == xml.dom.minidom.Node.DOCUMENT_FRAGMENT_NODE: | |||
clone = newOwnerDocument.createDocumentFragment() | |||
if deep: | |||
for child in node.childNodes: | |||
c = xml.dom.minidom._clone_node(child, deep, newOwnerDocument) | |||
clone.appendChild(c) | |||
elif node.nodeType == xml.dom.minidom.Node.TEXT_NODE: | |||
clone = newOwnerDocument.createTextNode(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.CDATA_SECTION_NODE: | |||
clone = newOwnerDocument.createCDATASection(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE: | |||
clone = newOwnerDocument.createProcessingInstruction(node.target, | |||
node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.COMMENT_NODE: | |||
clone = newOwnerDocument.createComment(node.data) | |||
elif node.nodeType == xml.dom.minidom.Node.ATTRIBUTE_NODE: | |||
clone = newOwnerDocument.createAttributeNS(node.namespaceURI, | |||
node.nodeName) | |||
clone.specified = True | |||
clone.value = node.value | |||
elif node.nodeType == xml.dom.minidom.Node.DOCUMENT_TYPE_NODE: | |||
assert node.ownerDocument is not newOwnerDocument | |||
operation = xml.dom.UserDataHandler.NODE_IMPORTED | |||
clone = newOwnerDocument.implementation.createDocumentType( | |||
node.name, node.publicId, node.systemId) | |||
clone.ownerDocument = newOwnerDocument | |||
if deep: | |||
clone.entities._seq = [] | |||
clone.notations._seq = [] | |||
for n in node.notations._seq: | |||
notation = xml.dom.minidom.Notation(n.nodeName, n.publicId, n.systemId) | |||
notation.ownerDocument = newOwnerDocument | |||
clone.notations._seq.append(notation) | |||
if hasattr(n, '_call_user_data_handler'): | |||
n._call_user_data_handler(operation, n, notation) | |||
for e in node.entities._seq: | |||
entity = xml.dom.minidom.Entity(e.nodeName, e.publicId, e.systemId, | |||
e.notationName) | |||
entity.actualEncoding = e.actualEncoding | |||
entity.encoding = e.encoding | |||
entity.version = e.version | |||
entity.ownerDocument = newOwnerDocument | |||
clone.entities._seq.append(entity) | |||
if hasattr(e, '_call_user_data_handler'): | |||
e._call_user_data_handler(operation, n, entity) | |||
else: | |||
# Note the cloning of Document and DocumentType nodes is | |||
# implemenetation specific. minidom handles those cases | |||
# directly in the cloneNode() methods. | |||
raise xml.dom.NotSupportedErr("Cannot clone node %s" % repr(node)) | |||
# Check for _call_user_data_handler() since this could conceivably | |||
# used with other DOM implementations (one of the FourThought | |||
# DOMs, perhaps?). | |||
if hasattr(node, '_call_user_data_handler'): | |||
node._call_user_data_handler(operation, node, clone) | |||
return clone | |||
xml.dom.minidom._clone_node = _clone_node | |||
@@ -1823,24 +1823,24 @@ If attribute is None, "type" is assumed, return the corresponding | |||
self.annotation = Annotation(self) | |||
self.annotation.fromDom(i) | |||
elif component == 'simpleType' and not self.content: | |||
self.content = AnonymousSimpleType(self) | |||
self.content = AnonymousSimpleType(self) | |||
self.content.fromDom(i) | |||
elif component == 'complexType' and not self.content: | |||
self.content = LocalComplexType(self) | |||
self.content = LocalComplexType(self) | |||
self.content.fromDom(i) | |||
elif component == 'key': | |||
constraints.append(Key(self)) | |||
constraints[-1].fromDom(i) | |||
constraints.append(Key(self)) | |||
constraints[-1].fromDom(i) | |||
elif component == 'keyref': | |||
constraints.append(KeyRef(self)) | |||
constraints[-1].fromDom(i) | |||
constraints.append(KeyRef(self)) | |||
constraints[-1].fromDom(i) | |||
elif component == 'unique': | |||
constraints.append(Unique(self)) | |||
constraints[-1].fromDom(i) | |||
constraints.append(Unique(self)) | |||
constraints[-1].fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.constraints = constraints | |||
@@ -1890,7 +1890,7 @@ Local elements can be qualified or unqualifed according | |||
return True | |||
if form == 'unqualified': | |||
return False | |||
raise SchemaError, 'Bad form (%s) for element: %s' %(form, self.getItemTrace()) | |||
raise SchemaError, 'Bad form (%s) for element: %s' %(form, self.getItemTrace()) | |||
class ElementReference(XMLSchemaComponent,\ | |||
@@ -1938,7 +1938,7 @@ class ElementReference(XMLSchemaComponent,\ | |||
self.annotation = Annotation(self) | |||
self.annotation.fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
class ElementWildCard(LocalElementDeclaration, WildCardMarker): | |||
@@ -1988,7 +1988,7 @@ class ElementWildCard(LocalElementDeclaration, WildCardMarker): | |||
self.annotation = Annotation(self) | |||
self.annotation.fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
###################################################### | |||
@@ -2033,22 +2033,22 @@ class Sequence(XMLSchemaComponent,\ | |||
continue | |||
elif component == 'element': | |||
if i.hasattr('ref'): | |||
content.append(ElementReference(self)) | |||
content.append(ElementReference(self)) | |||
else: | |||
content.append(LocalElementDeclaration(self)) | |||
content.append(LocalElementDeclaration(self)) | |||
elif component == 'group': | |||
content.append(ModelGroupReference(self)) | |||
content.append(ModelGroupReference(self)) | |||
elif component == 'choice': | |||
content.append(Choice(self)) | |||
content.append(Choice(self)) | |||
elif component == 'sequence': | |||
content.append(Sequence(self)) | |||
content.append(Sequence(self)) | |||
elif component == 'any': | |||
content.append(ElementWildCard(self)) | |||
content.append(ElementWildCard(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
content[-1].fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.content = tuple(content) | |||
@@ -2090,14 +2090,14 @@ class All(XMLSchemaComponent,\ | |||
continue | |||
elif component == 'element': | |||
if i.hasattr('ref'): | |||
content.append(ElementReference(self)) | |||
content.append(ElementReference(self)) | |||
else: | |||
content.append(LocalElementDeclaration(self)) | |||
content.append(LocalElementDeclaration(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
content[-1].fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.content = tuple(content) | |||
@@ -2140,22 +2140,22 @@ class Choice(XMLSchemaComponent,\ | |||
continue | |||
elif component == 'element': | |||
if i.hasattr('ref'): | |||
content.append(ElementReference(self)) | |||
content.append(ElementReference(self)) | |||
else: | |||
content.append(LocalElementDeclaration(self)) | |||
content.append(LocalElementDeclaration(self)) | |||
elif component == 'group': | |||
content.append(ModelGroupReference(self)) | |||
content.append(ModelGroupReference(self)) | |||
elif component == 'choice': | |||
content.append(Choice(self)) | |||
content.append(Choice(self)) | |||
elif component == 'sequence': | |||
content.append(Sequence(self)) | |||
content.append(Sequence(self)) | |||
elif component == 'any': | |||
content.append(ElementWildCard(self)) | |||
content.append(ElementWildCard(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
content[-1].fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.content = tuple(content) | |||
@@ -2201,10 +2201,10 @@ class ModelGroupDefinition(XMLSchemaComponent,\ | |||
elif component == 'sequence' and not self.content: | |||
self.content = Sequence(self) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.content.fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
class ModelGroupReference(XMLSchemaComponent,\ | |||
@@ -2248,9 +2248,9 @@ class ModelGroupReference(XMLSchemaComponent,\ | |||
self.annotation = Annotation(self) | |||
self.annotation.fromDom(i) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
@@ -2364,13 +2364,13 @@ class ComplexType(XMLSchemaComponent,\ | |||
elif component == 'anyAttribute': | |||
self.attr_content.append(AttributeWildCard(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s): %s' \ | |||
raise SchemaError, 'Unknown component (%s): %s' \ | |||
%(contents[indx].getTagName(),self.getItemTrace()) | |||
self.attr_content[-1].fromDom(contents[indx]) | |||
indx += 1 | |||
class _DerivedType(XMLSchemaComponent): | |||
def __init__(self, parent): | |||
def __init__(self, parent): | |||
XMLSchemaComponent.__init__(self, parent) | |||
self.annotation = None | |||
# XXX remove attribute derivation, inconsistent | |||
@@ -2393,9 +2393,9 @@ class ComplexType(XMLSchemaComponent,\ | |||
elif component == 'extension' and not self.derivation: | |||
self.derivation = self.__class__.Extension(self) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(i.getTagName()) | |||
self.derivation.fromDom(i) | |||
self.content = self.derivation | |||
@@ -2488,7 +2488,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
self.content.fromDom(contents[indx]) | |||
indx += 1 | |||
else: | |||
self.content = None | |||
self.content = None | |||
self.attr_content = [] | |||
while indx < num: | |||
@@ -2506,7 +2506,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
elif component == 'anyAttribute': | |||
self.attr_content.append(AttributeWildCard(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)' %(contents[indx].getTagName()) | |||
raise SchemaError, 'Unknown component (%s)' %(contents[indx].getTagName()) | |||
self.attr_content[-1].fromDom(contents[indx]) | |||
indx += 1 | |||
@@ -2575,7 +2575,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
'anyAttribute']} | |||
tag = 'extension' | |||
def __init__(self, parent): | |||
def __init__(self, parent): | |||
XMLSchemaComponent.__init__(self, parent) | |||
self.annotation = None | |||
self.attr_content = None | |||
@@ -2611,7 +2611,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
elif component == 'anyAttribute': | |||
content.append(AttributeWildCard(self)) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)'\ | |||
raise SchemaError, 'Unknown component (%s)'\ | |||
%(contents[indx].getTagName()) | |||
content[-1].fromDom(contents[indx]) | |||
indx += 1 | |||
@@ -2641,7 +2641,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
'attributeGroup', 'anyAttribute'] + RestrictionMarker.facets} | |||
tag = 'restriction' | |||
def __init__(self, parent): | |||
def __init__(self, parent): | |||
XMLSchemaComponent.__init__(self, parent) | |||
self.annotation = None | |||
self.content = None | |||
@@ -2680,7 +2680,7 @@ class ComplexType(XMLSchemaComponent,\ | |||
self.content.append(AnonymousSimpleType(self)) | |||
self.content[-1].fromDom(contents[indx]) | |||
else: | |||
raise SchemaError, 'Unknown component (%s)'\ | |||
raise SchemaError, 'Unknown component (%s)'\ | |||
%(contents[indx].getTagName()) | |||
content[-1].fromDom(contents[indx]) | |||
indx += 1 | |||
@@ -2968,3 +2968,4 @@ class TypeDescriptionComponent(tupleClass): | |||
def getName(self): | |||
return self[1] | |||
@@ -80,7 +80,7 @@ else: | |||
# xml_attrs -- Attributes in XML namespace from parent | |||
# xml_attrs_local -- Local attributes in XML namespace. | |||
ns_parent, ns_rendered, xml_attrs = \ | |||
self.state[0], self.state[1].copy(), self.state[2].copy() #0422 | |||
self.state[0], self.state[1].copy(), self.state[2].copy() #0422 | |||
ns_local = ns_parent.copy() | |||
xml_attrs_local = {} | |||
@@ -94,50 +94,50 @@ else: | |||
sort_these_attrs +=c14n._attrs(node) | |||
for a in sort_these_attrs: | |||
if a.namespaceURI == c14n.XMLNS.BASE: | |||
n = a.nodeName | |||
if n == "xmlns:": n = "xmlns" # DOM bug workaround | |||
ns_local[n] = a.nodeValue | |||
elif a.namespaceURI == c14n.XMLNS.XML: | |||
if c14n._inclusive(self) or (in_subset and c14n._in_subset(self.subset, a)): #020925 Test to see if attribute node in subset | |||
xml_attrs_local[a.nodeName] = a #0426 | |||
else: | |||
if c14n._in_subset(self.subset, a): #020925 Test to see if attribute node in subset | |||
other_attrs.append(a) | |||
#add local xml:foo attributes to ancestor's xml:foo attributes | |||
xml_attrs.update(xml_attrs_local) | |||
if a.namespaceURI == c14n.XMLNS.BASE: | |||
n = a.nodeName | |||
if n == "xmlns:": n = "xmlns" # DOM bug workaround | |||
ns_local[n] = a.nodeValue | |||
elif a.namespaceURI == c14n.XMLNS.XML: | |||
if c14n._inclusive(self) or (in_subset and c14n._in_subset(self.subset, a)): #020925 Test to see if attribute node in subset | |||
xml_attrs_local[a.nodeName] = a #0426 | |||
else: | |||
if c14n._in_subset(self.subset, a): #020925 Test to see if attribute node in subset | |||
other_attrs.append(a) | |||
#add local xml:foo attributes to ancestor's xml:foo attributes | |||
xml_attrs.update(xml_attrs_local) | |||
# Render the node | |||
W, name = self.write, None | |||
if in_subset: | |||
name = node.nodeName | |||
W('<') | |||
W(name) | |||
# Create list of NS attributes to render. | |||
ns_to_render = [] | |||
for n,v in ns_local.items(): | |||
# If default namespace is XMLNS.BASE or empty, | |||
# and if an ancestor was the same | |||
if n == "xmlns" and v in [ c14n.XMLNS.BASE, '' ] \ | |||
and ns_rendered.get('xmlns') in [ c14n.XMLNS.BASE, '', None ]: | |||
continue | |||
# "omit namespace node with local name xml, which defines | |||
# the xml prefix, if its string value is | |||
# http://www.w3.org/XML/1998/namespace." | |||
if n in ["xmlns:xml", "xml"] \ | |||
and v in [ 'http://www.w3.org/XML/1998/namespace' ]: | |||
continue | |||
# If not previously rendered | |||
# and it's inclusive or utilized | |||
if (n,v) not in ns_rendered.items() \ | |||
and (c14n._inclusive(self) or \ | |||
c14n._utilized(n, node, other_attrs, self.unsuppressedPrefixes)): | |||
ns_to_render.append((n, v)) | |||
name = node.nodeName | |||
W('<') | |||
W(name) | |||
# Create list of NS attributes to render. | |||
ns_to_render = [] | |||
for n,v in ns_local.items(): | |||
# If default namespace is XMLNS.BASE or empty, | |||
# and if an ancestor was the same | |||
if n == "xmlns" and v in [ c14n.XMLNS.BASE, '' ] \ | |||
and ns_rendered.get('xmlns') in [ c14n.XMLNS.BASE, '', None ]: | |||
continue | |||
# "omit namespace node with local name xml, which defines | |||
# the xml prefix, if its string value is | |||
# http://www.w3.org/XML/1998/namespace." | |||
if n in ["xmlns:xml", "xml"] \ | |||
and v in [ 'http://www.w3.org/XML/1998/namespace' ]: | |||
continue | |||
# If not previously rendered | |||
# and it's inclusive or utilized | |||
if (n,v) not in ns_rendered.items() \ | |||
and (c14n._inclusive(self) or \ | |||
c14n._utilized(n, node, other_attrs, self.unsuppressedPrefixes)): | |||
ns_to_render.append((n, v)) | |||
##################################### | |||
# JRB | |||
@@ -191,34 +191,34 @@ else: | |||
# Sort and render the ns, marking what was rendered. | |||
ns_to_render.sort(c14n._sorter_ns) | |||
for n,v in ns_to_render: | |||
#XXX JRB, getting 'xmlns,None' here when xmlns='' | |||
if v: self._do_attr(n, v) | |||
else: | |||
v = '' | |||
self._do_attr(n, v) | |||
ns_rendered[n]=v #0417 | |||
# If exclusive or the parent is in the subset, add the local xml attributes | |||
# Else, add all local and ancestor xml attributes | |||
# Sort and render the attributes. | |||
if not c14n._inclusive(self) or c14n._in_subset(self.subset,node.parentNode): #0426 | |||
other_attrs.extend(xml_attrs_local.values()) | |||
else: | |||
other_attrs.extend(xml_attrs.values()) | |||
# Sort and render the ns, marking what was rendered. | |||
ns_to_render.sort(c14n._sorter_ns) | |||
for n,v in ns_to_render: | |||
#XXX JRB, getting 'xmlns,None' here when xmlns='' | |||
if v: self._do_attr(n, v) | |||
else: | |||
v = '' | |||
self._do_attr(n, v) | |||
ns_rendered[n]=v #0417 | |||
# If exclusive or the parent is in the subset, add the local xml attributes | |||
# Else, add all local and ancestor xml attributes | |||
# Sort and render the attributes. | |||
if not c14n._inclusive(self) or c14n._in_subset(self.subset,node.parentNode): #0426 | |||
other_attrs.extend(xml_attrs_local.values()) | |||
else: | |||
other_attrs.extend(xml_attrs.values()) | |||
#print "OTHER: ", other_attrs | |||
other_attrs.sort(c14n._sorter) | |||
for a in other_attrs: | |||
self._do_attr(a.nodeName, a.value) | |||
other_attrs.sort(c14n._sorter) | |||
for a in other_attrs: | |||
self._do_attr(a.nodeName, a.value) | |||
W('>') | |||
# Push state, recurse, pop state. | |||
state, self.state = self.state, (ns_local, ns_rendered, xml_attrs) | |||
for c in c14n._children(node): | |||
c14n._implementation.handlers[c.nodeType](self, c) | |||
c14n._implementation.handlers[c.nodeType](self, c) | |||
self.state = state | |||
if name: W('</%s>' % name) | |||