我加载了一个xml文件,我想从中删除没有属性或子元素的元素,我正在尝试实现这样的目标:
for child in root.find('targetElement'):
print(child)
if(len(child.attrib) < 1 and len(child) < 1):
root.remove(child)
但我想问题是我找到了元素,然后尝试将其从根元素中删除。有人可以告诉我怎么做吗?
答案 0 :(得分:1)
您需要从父节点中删除节点,而不是从根节点删除节点。
以下代码适用于lxml.etree
:
from lxml import etree as ET
root = ET.parse('yourfile.xml')
for child in root.iterfind('targetElement'):
if(len(child.attrib) < 1 and len(child) < 1):
child.getparent().remove(child)
标准xml.etree.ElementTree
缺少任何选择父节点的方法。我们可以通过为整个树构建一个子到父地图来解决这个限制(source):
import xml.etree.ElementTree as ET
root = ET.parse('yourfile.xml')
# https://stackoverflow.com/a/20132342/18771
parent_map = {c:p for p in root.iter() for c in p}
for child in root.iterfind('targetElement'):
if(len(child.attrib) < 1 and len(child) < 1):
parent_map[child].remove(child)