新しい要素が欠落している場合に追加するこの単純な関数があります。
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 を変更する方法を誰かが指摘できますか?