diff --git a/facho/facho.py b/facho/facho.py index 0f143a9..9f7101e 100644 --- a/facho/facho.py +++ b/facho/facho.py @@ -82,6 +82,9 @@ class LXMLBuilder: def append(self, elem, child): elem.append(child) + def remove(self, elem): + elem.getparent().remove(elem) + def set_text(self, elem, text): elem.text = text @@ -164,6 +167,11 @@ class FachoXML: def placeholder_for(self, xpath): return self.find_or_create_element(xpath) + def replacement_for(self, xpath, new_xpath, content, **attrs): + elem = self.get_element(xpath) + self.builder.remove(elem) + return self.set_element(new_xpath, content, **attrs) + def find_or_create_element(self, xpath, append=False): """ @param xpath ruta xpath para crear o consultar de un solo elemendo diff --git a/tests/test_facho.py b/tests/test_facho.py index cfcffa1..321435d 100644 --- a/tests/test_facho.py +++ b/tests/test_facho.py @@ -170,3 +170,11 @@ def test_facho_xml_fragment_relative(): invoice = xml.fragment('./Invoice') invoice.set_element('./Id', 1) assert xml.tostring() == '1' + + +def test_facho_xml_replacement_for(): + xml = facho.FachoXML('root') + xml.placeholder_for('./child/type') + xml.replacement_for('./child/type', + './child/code', 'test') + assert xml.tostring() == 'test'