我有这个简单的功能,如果缺少它们会添加新元素:
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的方法吗?
答案 0 :(得分: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