210 # (because some different nodes can have the same name) |
210 # (because some different nodes can have the same name) |
211 if parent: |
211 if parent: |
212 classname = "%s_%s"%(parent, nodename) |
212 classname = "%s_%s"%(parent, nodename) |
213 else: |
213 else: |
214 classname = nodename |
214 classname = nodename |
215 self.GenerateXSDClasses(node, classname) |
215 if len(node.childNodes) > 0: |
216 nodetype = "cls:%s"%classname |
216 self.GenerateXSDClasses(node, classname) |
|
217 nodetype = "cls:%s"%classname |
|
218 else: |
|
219 nodetype = classname |
217 if name == "attribute": |
220 if name == "attribute": |
218 if "use" in node._attrs: |
221 if "use" in node._attrs: |
219 use = GetAttributeValue(node._attrs["use"]) |
222 use = GetAttributeValue(node._attrs["use"]) |
220 else: |
223 else: |
221 use = "optional" |
224 use = "optional" |
681 if attr_type.startswith("bse:"): |
684 if attr_type.startswith("bse:"): |
682 val = GetComputedValue(attr_type.replace("[]",""), GetAttributeValue(node)) |
685 val = GetComputedValue(attr_type.replace("[]",""), GetAttributeValue(node)) |
683 elif attr_type.startswith("cls:"): |
686 elif attr_type.startswith("cls:"): |
684 val = classes[attr_type[4:].replace("[]","")]() |
687 val = classes[attr_type[4:].replace("[]","")]() |
685 val.loadXMLTree(node) |
688 val.loadXMLTree(node) |
|
689 else: |
|
690 val = None |
686 # Stock value in content attribute |
691 # Stock value in content attribute |
687 if val: |
692 if val is not None: |
688 if attr_type.endswith("[]"): |
693 if attr_type.endswith("[]"): |
689 if self.content: |
694 if self.content: |
690 self.content["value"].append(val) |
695 self.content["value"].append(val) |
691 else: |
696 else: |
692 self.content = {"name":name,"value":[val]} |
697 self.content = {"name":name,"value":[val]} |
693 else: |
698 else: |
694 self.content = {"name":name,"value":val} |
699 self.content = {"name":name,"value":val} |
|
700 else: |
|
701 self.content = {"name":name,"value":None} |
695 |
702 |
696 # Class has a list of attributes that can have different value types |
703 # Class has a list of attributes that can have different value types |
697 elif "multichoice_content" in members.keys() and name in members["multichoice_content"].keys(): |
704 elif "multichoice_content" in members.keys() and name in members["multichoice_content"].keys(): |
698 attr_type = members["multichoice_content"][name] |
705 attr_type = members["multichoice_content"][name] |
699 # Extracts the value |
706 # Extracts the value |
801 else: |
808 else: |
802 text += ind1 + "<%s>%s</%s>\n"%(self.content["name"], ComputeValue(self.content["value"]), self.content["name"]) |
809 text += ind1 + "<%s>%s</%s>\n"%(self.content["name"], ComputeValue(self.content["value"]), self.content["name"]) |
803 elif value_type.endswith("[]"): |
810 elif value_type.endswith("[]"): |
804 for content in self.content["value"]: |
811 for content in self.content["value"]: |
805 text += content.generateXMLText(self.content["name"], indent + 1) |
812 text += content.generateXMLText(self.content["name"], indent + 1) |
|
813 elif self.content["value"] is not None: |
|
814 text += self.content["value"].generateXMLText(self.content["name"], indent + 1) |
806 else: |
815 else: |
807 text += self.content["value"].generateXMLText(self.content["name"], indent + 1) |
816 ind5, ind6 = getIndent(indent + 1, self.content["name"]) |
|
817 text += ind5 + "<%s/>\n"%self.content["name"] |
808 elif attr == "multichoice_content": |
818 elif attr == "multichoice_content": |
809 if len(self.content) > 0: |
819 if len(self.content) > 0: |
810 for element in self.content: |
820 for element in self.content: |
811 if first: |
821 if first: |
812 text += ">\n" |
822 text += ">\n" |