According to the documentation xml.etree.ElementTree.Element
has a function .remove(subelement)
. However, .findall()
will return a list. Thus, replacing rem_rule.remove(log)
with:
for element in log:
rem_rule.remove(element)
solves the problem. Your complete snippet then looks like
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
rules = tree.findall('.//security/rules/entry')
for rem_rule in rules:
log = rem_rule.findall('log-setting')
for element in log:
rem_rule.remove(element)
tree.write('newtest.xml')