import xml.etree.ElementTree as ET import codecs def indent(elem, level=0): i = "\n" + level*" " if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i class XMLOutput(): def __init__(self, groups, board, inject_xml_file_name): xml_parameters = ET.Element("parameters") xml_version = ET.SubElement(xml_parameters, "version") xml_version.text = "3" xml_version = ET.SubElement(xml_parameters, "parameter_version_major") xml_version.text = "1" xml_version = ET.SubElement(xml_parameters, "parameter_version_minor") xml_version.text = "8" importtree = ET.parse(inject_xml_file_name) injectgroups = importtree.getroot().findall("group") for igroup in injectgroups: xml_parameters.append(igroup) last_param_name = "" board_specific_param_set = False for group in groups: xml_group = ET.SubElement(xml_parameters, "group") xml_group.attrib["name"] = group.GetName() for param in group.GetParams(): if (last_param_name == param.GetName() and not board_specific_param_set) or last_param_name != param.GetName(): xml_param = ET.SubElement(xml_group, "parameter") xml_param.attrib["name"] = param.GetName() xml_param.attrib["default"] = param.GetDefault() xml_param.attrib["type"] = param.GetType() last_param_name = param.GetName() for code in param.GetFieldCodes(): value = param.GetFieldValue(code) if code == "board": if value == board: board_specific_param_set = True xml_field = ET.SubElement(xml_param, code) xml_field.text = value else: xml_group.remove(xml_param) else: xml_field = ET.SubElement(xml_param, code) xml_field.text = value if last_param_name != param.GetName(): board_specific_param_set = False if len(param.GetEnumCodes()) > 0: xml_values = ET.SubElement(xml_param, "values") for code in param.GetEnumCodes(): xml_value = ET.SubElement(xml_values, "value") xml_value.attrib["code"] = code; xml_value.text = param.GetEnumValue(code) indent(xml_parameters) self.xml_document = ET.ElementTree(xml_parameters) def Save(self, filename): self.xml_document.write(filename, encoding="UTF-8")