我加载了一个 xml 文件,我想从中删除没有属性或子级的元素,我试图实现这样的目标:
for child in root.find('targetElement'):
print(child)
if(len(child.attrib) < 1 and len(child) < 1):
root.remove(child)
但我想问题是我正在找到该元素,然后尝试将其从根元素中删除。有人可以告诉我该怎么做吗?
我加载了一个 xml 文件,我想从中删除没有属性或子级的元素,我试图实现这样的目标:
for child in root.find('targetElement'):
print(child)
if(len(child.attrib) < 1 and len(child) < 1):
root.remove(child)
但我想问题是我正在找到该元素,然后尝试将其从根元素中删除。有人可以告诉我该怎么做吗?
您需要从其父节点中删除一个节点,而不是从根中删除。
以下代码适用于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)