Michael Anderson
Michael Anderson

Reputation: 73480

How can I remove all elements matching an xpath in python using lxml?

So I have some XML like this:

<bar>
  <foo>Something</foo>
  <baz>
     <foo>Hello</foo>
     <zap>Another</zap>
  <baz>
<bar>

And I want to remove all the foo nodes. Something like this doesn't work

params = xml.xpath('//foo')
for n in params:
  xml.getroot().remove(n)

Giving

ValueError: Element is not a child of this node.

What is a neat way to do this?

Upvotes: 13

Views: 8441

Answers (1)

Steven D. Majewski
Steven D. Majewski

Reputation: 2157

try:

 for elem in xml.xpath( '//foo' ) :
      elem.getparent().remove(elem)

remove it from it's parent, not the root ( unless it IS a child of the root element )

Upvotes: 21

Related Questions