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"]: |