Используйте метод remove
для xmlElement:
tree=et.fromstring(xml)
for bad in tree.xpath("//fruit[@state=\'rotten\']"):
bad.getparent().remove(bad) # here I grab the parent of the element to call the remove directly on it
print et.tostring(tree, pretty_print=True, xml_declaration=True)
Если мне пришлось сравнивать с версией @Acorn, моя работа будет работать, даже если элементы для удаления не находятся непосредственно под корневым узлом вашего xml.