3

我有这个简单的功能,如果它们丢失,它会添加新元素:

def add_missing(root):
    """ Add missing elements and return `root` """
    for tag, missing_el in missing_tags.items():
        for elem in root.iterfind(".//" + tag):
            if elem.find(missing_el.tag) is None:
                elem.append(missing_el)
                print tostring(elem)
    print tostring(root)
    return root

但是,当我检查 root 是否包含缺少的元素时,我发现只有最后一个元素包含新附加的元素。

有人可以指出一种在迭代 etree 时修改它的方法吗?

4

1 回答 1

4

在树的不同位置添加相同的元素只会移动该元素。使用 deepcopy 解决了这个问题:

from copy import deepcopy
def add_missing(root):
    """ Add missing elements and return `root` """
    for tag, missing_el in missing_tags.items():
        for elem in root.findall(".//" + tag):
            if elem.find(missing_el.tag) is None:
                elem.append(deepcopy(missing_el))
                print tostring(elem)
    print tostring(root)
    return root
于 2012-08-17T11:25:39.990 回答