xmlclass/xmlclass.py
changeset 125 394d9f168258
parent 119 564564136c79
child 151 aaa80b48bead
equal deleted inserted replaced
124:635d0817508c 125:394d9f168258
   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"