1

尝试从 xml 文档中删除元素时出现以下错误。“ValueError: list.remove(x): x not in list” 这是代码,错误发生在删除的那一行。

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")
4

2 回答 2

12

您正在循环不是根的直接子元素的元素。您需要获取对直接父级的引用

使用不是那么容易的 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).

于 2013-04-12T21:23:53.980 回答
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")
于 2018-05-08T07:26:31.877 回答