尝试从xml文档中删除元素时出现以下错误。 “ValueError:list.remove(x):x不在列表中” 这是代码,错误发生在删除行。
import xml.etree.ElementTree as ET
tree = ET.parse("AddInClasses.xml")
rootElem = tree.getroot()
for class2 in rootElem.findall("Transforms/class"):
name2 = class2.find("name")
if name2.text == "Get Field":
rootElem.remove(class2)
tree.write("AddInClassesTrimmed.xml")
答案 0 :(得分:9)
您正在循环遍历根 direct 子元素的元素。您需要获得对直接父的引用,而不是。
使用ElementTree并不容易,元素上没有父指针。您需要首先遍历Transforms
,然后再遍历class
:
for parent in rootElem.findall("Transforms[class]"):
for class2 in parent.findall("class"):
name2 = class2.find("name")
if name2.text == "Get Field":
parent.remove(class2)
我添加了一个额外的循环,找到包含至少一个Transforms
元素的所有class
个元素。
如果您使用的是lxml
,那么您可以使用class2.getparent().remove(class2)
。
答案 1 :(得分:0)
以下也应该有效......
import xml.etree.ElementTree as ET
tree = ET.parse("AddInClasses.xml")
rootElem = tree.getroot()
for class2 in rootElem.findall("Transforms/class"):
name2 = class2.find("name")
if name2.text == "Get Field":
rootElem.find("Transforms").remove(class2) #<<< see the lone change here
tree.write("AddInClassesTrimmed.xml")