我有一个简单的函数,如果缺少新元素,它将添加新元素:
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的同时修改etree的方法吗?
解决方法:
在树的不同位置添加相同的元素只会在该元素周围移动.使用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