def __init__(self, nodes, attribs, filename=None, xml_data=None): keys = nodes.keys() keys.append(attribs.keys()) keys.append(("_nodes", "_attribs", "_keys", "_basekeys")) self.__dict__["_nodes"] = nodes self.__dict__["_attribs"] = attribs self.__dict__["_basekeys"] = keys keys.append("description") self.__dict__["_keys"] = keys for (name, value) in attribs.iteritems(): self.__dict__[name] = value try: xml_root = ET.parse(filename) except: xml_root = None if xml_root is None: try: xml_root = ET.ElementTree(ET.fromstring(xml_data)) except: xml_root = None for (node_name, node_attrib) in nodes.iteritems(): if(isinstance(node_attrib, dict)): if node_attrib.has_key("subnodes"): node = create_node(node_name, node_attrib["attribs"], xml_root, node_attrib["subnodes"] ) else: node = create_node(node_name, node_attrib["attribs"], xml_root ) else: node = create_node(node_name, node_attrib, xml_root) self.__dict__[node_name] = node if not xml_root is None: el = xml_root.getroot() for (name, value) in el.attrib.items(): self.__dict__[name] = value el = xml_root.find("description") if not el is None: self.description = str(el.text)
def asXML(self, encoding="utf-8"): xml_tree = self.asXMLTree() xml_string = ET.tostring(xml_tree, encoding) return xml_beautifier(xml_string)