Skip to content Skip to sidebar Skip to footer

Adding Attributes To Existing Elements, Removing Elements, Etc With Lxml

I parse in the XML using from lxml import etree tree = etree.parse('test.xml', etree.XMLParser()) Now I want to work on the parsed XML. I'm having trouble removing elements with

Solution 1:

You can get to the root element via this call: root=tree.getroot()

Using that root element, you can use findall() and remove elements that match your criteria:

deleteThese = root.findall("title")
for element in deleteThese: root.remove(element)

Finally, you can see what your new tree looks like with this: etree.tostring(root, pretty_print=True)

Here is some info about how find/findall work: http://infohost.nmt.edu/tcc/help/pubs/pylxml/class-ElementTree.html#ElementTree-find

To add an attribute to an element, try something like this:

root.attrib['myNewAttribute']='hello world'

Solution 2:

The remove method should do what you want:

>>>from lxml import etree>>>from StringIO import StringIO>>>s = '<Root><Description><Title>foo</Title></Description></Root>'>>>tree = etree.parse(StringIO(s))>>>print(etree.tostring(tree.getroot()))
<Root><Description><Title>foo</Title></Description></Root>

>>>title = tree.find('//Title')>>>title.getparent().remove(title)>>>etree.tostring(tree.getroot())
'<Root><Description/></Root>'

>>>print(etree.tostring(tree.getroot()))
<Root><Description/></Root>

Post a Comment for "Adding Attributes To Existing Elements, Removing Elements, Etc With Lxml"