xmlclass/xmlclass.py
branchpython3
changeset 3761 479ba844ded8
parent 3755 ca814b175391
equal deleted inserted replaced
3760:7270e7e092f8 3761:479ba844ded8
   876             raise ValueError("Unknown namespace \"%s\"!" % namespace)
   876             raise ValueError("Unknown namespace \"%s\"!" % namespace)
   877         return None, None
   877         return None, None
   878 
   878 
   879     def ExtractNodeAttrs(self, element_name, node, valid_attrs):
   879     def ExtractNodeAttrs(self, element_name, node, valid_attrs):
   880         attrs = {}
   880         attrs = {}
   881         for qualified_name, attr in list(node._attrs.items()):
   881         if node._attrs:
   882             namespace, name = DecomposeQualifiedName(qualified_name)
   882             for qualified_name, attr in list(node._attrs.items()):
   883             if name in valid_attrs:
   883                 namespace, name = DecomposeQualifiedName(qualified_name)
   884                 infos = self.GetQualifiedNameInfos(name, namespace)
   884                 if name in valid_attrs:
   885                 if infos["type"] != SYNTAXATTRIBUTE:
   885                     infos = self.GetQualifiedNameInfos(name, namespace)
   886                     raise ValueError("\"%s\" can't be a member attribute!" % name)
   886                     if infos["type"] != SYNTAXATTRIBUTE:
   887                 elif name in attrs:
   887                         raise ValueError("\"%s\" can't be a member attribute!" % name)
   888                     raise ValueError("\"%s\" attribute has been twice!" % name)
   888                     elif name in attrs:
   889                 elif element_name in infos["extract"]:
   889                         raise ValueError("\"%s\" attribute has been twice!" % name)
   890                     attrs[name] = infos["extract"][element_name](attr)
   890                     elif element_name in infos["extract"]:
       
   891                         attrs[name] = infos["extract"][element_name](attr)
       
   892                     else:
       
   893                         attrs[name] = infos["extract"]["default"](attr)
       
   894                 elif namespace == "xmlns":
       
   895                     infos = self.GetQualifiedNameInfos("anyURI", self.SchemaNamespace)
       
   896                     value = infos["extract"](attr)
       
   897                     self.DefinedNamespaces[value] = name
       
   898                     self.NSMAP[name] = value
   891                 else:
   899                 else:
   892                     attrs[name] = infos["extract"]["default"](attr)
   900                     raise ValueError("Invalid attribute \"%s\" for member \"%s\"!" %
   893             elif namespace == "xmlns":
   901                                      (qualified_name, node.nodeName))
   894                 infos = self.GetQualifiedNameInfos("anyURI", self.SchemaNamespace)
       
   895                 value = infos["extract"](attr)
       
   896                 self.DefinedNamespaces[value] = name
       
   897                 self.NSMAP[name] = value
       
   898             else:
       
   899                 raise ValueError("Invalid attribute \"%s\" for member \"%s\"!" % (qualified_name, node.nodeName))
       
   900         for attr in valid_attrs:
   902         for attr in valid_attrs:
   901             if attr not in attrs and \
   903             if attr not in attrs and \
   902                attr in self.Namespaces[self.SchemaNamespace] and \
   904                attr in self.Namespaces[self.SchemaNamespace] and \
   903                "default" in self.Namespaces[self.SchemaNamespace][attr]:
   905                "default" in self.Namespaces[self.SchemaNamespace][attr]:
   904                 if element_name in self.Namespaces[self.SchemaNamespace][attr]["default"]:
   906                 if element_name in self.Namespaces[self.SchemaNamespace][attr]["default"]: