2012-08-17 46 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