xmlclass/xmlclass.py
changeset 1294 f02ba5b83811
parent 1293 40117d02601b
child 1300 8e1ee07bdff8
equal deleted inserted replaced
1293:40117d02601b 1294:f02ba5b83811
   534         return values
   534         return values
   535     return GetModelNameList
   535     return GetModelNameList
   536 
   536 
   537 def GenerateAnyInfos(infos):
   537 def GenerateAnyInfos(infos):
   538     
   538     
       
   539     def GetTextElement(tree):
       
   540         if infos["namespace"][0] == "##any":
       
   541             return tree.xpath("p")[0]
       
   542         return tree.xpath("ns:p", namespaces={"ns": infos["namespace"][0]})[0]
       
   543     
   539     def ExtractAny(tree):
   544     def ExtractAny(tree):
   540         if infos["namespace"][0] == "##any":
   545         return GetTextElement(tree).text
   541             return tree.xpath("p/text()")[0]
       
   542         return tree.xpath("ns:p/text()", namespaces={"ns": infos["namespace"][0]})[0]
       
   543     
   546     
   544     def GenerateAny(tree, value):
   547     def GenerateAny(tree, value):
   545         if infos["namespace"][0] == "##any":
   548         GetTextElement(tree).text = etree.CDATA(value)
   546             p = tree.xpath("p")[0]
       
   547         else:
       
   548             p = tree.xpath("ns:p", namespaces={"ns": infos["namespace"][0]})[0]
       
   549         p.text = etree.CDATA(value)
       
   550         
   549         
   551     def InitialAny():
   550     def InitialAny():
   552         if infos["namespace"][0] == "##any":
   551         if infos["namespace"][0] == "##any":
   553             element_name = "p"
   552             element_name = "p"
   554         else:
   553         else:
  1393             value = self.get(name)
  1392             value = self.get(name)
  1394             if value is not None:
  1393             if value is not None:
  1395                 return attribute_infos["attr_type"]["extract"](value, extract=False)
  1394                 return attribute_infos["attr_type"]["extract"](value, extract=False)
  1396             elif attribute_infos.has_key("fixed"):
  1395             elif attribute_infos.has_key("fixed"):
  1397                 return attribute_infos["attr_type"]["extract"](attribute_infos["fixed"], extract=False)
  1396                 return attribute_infos["attr_type"]["extract"](attribute_infos["fixed"], extract=False)
  1398             return attribute_infos["attr_type"]["initial"]()
  1397             elif attribute_infos.has_key("default"):
       
  1398                 return attribute_infos["attr_type"]["extract"](attribute_infos["default"], extract=False)
       
  1399             return None
  1399         
  1400         
  1400         elif elements.has_key(name):
  1401         elif elements.has_key(name):
  1401             element_infos = elements[name]
  1402             element_infos = elements[name]
  1402             element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"])
  1403             element_infos["elmt_type"] = FindTypeInfos(factory, element_infos["elmt_type"])
  1403             if element_infos["type"] == CHOICE:
  1404             if element_infos["type"] == CHOICE:
  1458                 
  1459                 
  1459                 for element in self.xpath(element_xpath, namespaces=factory.NSMAP):
  1460                 for element in self.xpath(element_xpath, namespaces=factory.NSMAP):
  1460                     self.remove(element)
  1461                     self.remove(element)
  1461                 
  1462                 
  1462                 if value is not None:
  1463                 if value is not None:
  1463                     previous_elements_xpath = "|".join(map(
  1464                     element_idx = elements.keys().index(name)
  1464                         lambda x: "%s:%s" % (factory.TargetNamespace, x)
  1465                     if element_idx > 0:
  1465                                   if x != "content"
  1466                         previous_elements_xpath = "|".join(map(
  1466                                   else elements["content"]["elmt_type"]["choices_xpath"](),
  1467                             lambda x: "%s:%s" % (factory.TargetNamespace, x)
  1467                         elements.keys()[elements.keys().index(name)]))
  1468                                       if x != "content"
  1468                     
  1469                                       else elements["content"]["elmt_type"]["choices_xpath"](),
  1469                     insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP))
  1470                             elements.keys()[:element_idx]))
       
  1471                         
       
  1472                         insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP))
       
  1473                     else:
       
  1474                         insertion_point = 0
  1470                     
  1475                     
  1471                     if not isinstance(value, ListType):
  1476                     if not isinstance(value, ListType):
  1472                         value = [value]
  1477                         value = [value]
  1473                         
  1478                         
  1474                     for element in reversed(value):
  1479                     for element in reversed(value):