我无法使用xml.etree.ElementTree删除某些元素。我发现了类似的情况here但它并没有解决我的问题。我还阅读了ElementTree和XPath上的文档。
我有一个类似于
的xml树<metadata>
<lineage>
<srcinfo></srcinfo>
<procstep>
<otherinfo></otherinfo>
</procstep>
<procstep>
<otherinfo></otherinfo>
</procstep>
<procstep>
<otherinfo></otherinfo>
</procstep>
<procstep>
<otherinfo></otherinfo>
</procstep>
</lineage>
</metadata>
假设我想删除第二个,第三个和第四个procstep元素。我尝试了以下代码,结果为“ValueError:list.remove(x):x not in list”错误。
while len(root.findall('.//lineage/procstep')) > 1:
root.remove(root.findall('.//lineage/procstep[last()]'))
有关为什么不起作用的任何建议?我的问题有其他方法吗?提前感谢任何建议。
答案 0 :(得分:0)
要删除procstep
元素,请使用procstep的父级(lineage
)。
尝试:
lineage = root.find('.//lineage')
last_procstep = lineage.find('./procstep[last()]')
lineage.remove(last_procstep)
如果您使用lxml,则可以使用getparent()
,如下所示:
last_procstep = root.find('.//lineage/procstep[last()]')
last_procstep.getparent().remove(last_procstep)
lineage = root.find('.//lineage')
for procstep in tuple(lineage.iterfind('./procstep'))[1:]:
lineage.remove(procstep)