python-lxml:就地修改树

我有一个简单的函数,如果缺少新元素,它将添加新元素:

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
上一篇:python-从一个文件中解析特定的XML属性,并将其追加到另一个文件中,前提是第二个文件中存在另一个属性


下一篇:如何转换<变成<在lxml中,Python吗?