def inject_file(self, default_model, config_model): updated_model = dict(default_model, **config_model) properties = [] for name, value_description in updated_model.items(): if isinstance(value_description, basestring): value_description = ( value_description, "Injected by env2config. Default value was: {0}. Default description was: {1}".format( default_model.get(name, ('', None))[0], default_model.get(name, (None, ''))[1], ) ) value, description = value_description properties.append(E.property( E.name(name), E.value(value), E.description(description), )) xml = E.configuration(*properties) xml_text = etree.tostring(xml, pretty_print=True, encoding='utf-8', xml_declaration=True) return xml_text
from lxml.builder import E from lxml import etree if __name__ == "__main__": test = E.root( E.configuration(E.param("ITEM1: p1"), E.param("ITEM1: p2"), E.param("ITEM1: p3"), name="Config 1"), E.configuration( E.param("ITEM2: p1"), E.param("ITEM2: p2"), E.param("ITEM2: p3"), E.param("ITEM2: p4"), name="Config 2" ), ) data = etree.tostring(test, pretty_print=True, xml_declaration=True) print data root = etree.XML(data) configs = root.xpath("//configuration") for c in configs: params = c.xpath("param") print "%s attrs=%s" % (c.tag, c.attrib) for p in params: print " %s" % p.text