2012-08-17 48 views
3

我有这个简单的功能,增加了新的元素,如果缺少: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 
然而

当我检查的根,如果它包含缺少的元素,我觉得只有最后一个元素包含新添加的元素。

有人可以指出一种方法来修改一个etree而迭代吗?

回答

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