Vraag Hoe verwijder ik alle elementen die overeenkomen met een xpath in python met lxml?


Dus ik heb wat XML zoals dit:

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

En ik wil alle foo-knooppunten verwijderen. Zoiets werkt niet

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

geven

ValueError: Element is not a child of this node.

Wat is een nette manier om dit te doen?


13
2017-07-29 02:49


oorsprong


antwoorden:


proberen:

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

verwijder het van zijn ouder, niet de root (tenzij het een kind van het wortelelement IS)


18
2017-07-29 03:32