3

新しい要素が欠落している場合に追加するこの単純な関数があります。

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

1 に答える 1

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
于 2012-08-17T11:25:39.990 に答える