从Root中删除元素时,Python ElementTree会给出Error

Der*_*ick 1 python elementtree

尝试从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")
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

您正在循环不是根的直接子元素的元素.你需要去直接父级的引用代替.

使用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)
Run Code Online (Sandbox Code Playgroud)

我添加了一个额外的循环,它找到包含Transforms至少一个class元素的所有元素.

如果您要使用lxml,那么您可以使用class2.getparent().remove(class2).