2017-09-27 12 views
0

私は見つけたほど多くの関連記事を読んだことがありますが、私は単純なXMLファイルを持っているので、別の要素の子として新しい要素(look_1)を追加する必要があります(Looks)。python elementTree、解析されたxmlファイルに新しい要素を追加しても効果はありません。エラーはありません。

AssetRoot 
    info_Materials 
     Looks/ 
    /info_Materials 
/AssetRoot 

目標はこれを生成することである: 私は、XMLはツリーが次のようになりますので、ここで動作するようにフォーマットするように見えることはできません

AssetRoot 
    info_Materials 
     Looks 
      look_1 
       (additional elements from a future script) 
      /look_1 
     /Looks 
    /info_Materials 
/AssetRoot 

私はdoesntの次のスクリプトを持っていますエラーをスローしますが、ファイルに対して何もしないように見えます。

def editXML(filename): 

     print 'editing xml file...' 
     tree = xml.parse(filename) 
     root = tree.getroot() 

     looks = root.findall('.//Looks') 
     print looks 

     look_1 = xml.Element('Look_1') 
     look_1.text = 'foobar' 
     looks.append(look_1) 


     with open(filename, 'w') as fn: 
     print 'writing xml file...' 
     tree.write(fn) 
     print 'file write successful' 


    if __name__ == '__main__': 

    editXML(assetInfo) 

私は私が '見える' 印刷する場合ルックス= root.findall(」.//が見える)が正しい要素を発見したことを確認することができます。私が正しく理解していれば、element.findall()の結果は要素を指すのではなく、要素の値を指していますか?では、実際の要素をどうやって手に入れることができるのでしょうか? 'look_1'を 'look'ではなく 'root'に追加すると、それは動作するので、私の質問はどのように新しい要素を入れ子の子要素に追加するのですか?

私の読んだところでは、むしろ追加の依存関係を含める必要はありません。

編集:私はいくつかの書き換え行なったし、仕事に次のが見つかりました:

def editXML(filename): 

    print 'editing xml file...' 
    tree = xml.ElementTree(file=filename) 
    root = tree.getroot() 
    looks = root[2][1] 

    look_1 = xml.Element('Look_1') 
    look_1.text = 'foobar' 
    looks.append(look_1) 

    with open(filename, 'w') as fn: 
     print 'writing xml file...' 
     tree.write(fn) 
     print 'file write successful' 


if __name__ == '__main__': 

    editXML(assetInfo) 

おそらくそのない最もエレガントな解決策が、それは誰もがよりよい解決策を持っている場合、私は興味があると思い、私の目的のために働く必要があります知っている。ありがとう。

+2

'findall'のためのドキュメントは、それがリストを返すと言う....あなたは'ルックス[0] .append(look_1) 'のような何かをする必要がありますか? – user

答えて

0

スレッドを閉じるには、私はそれを回答としてマークします。私の編集で述べたように、これは私が思いついた解決策でした。

def editXML(filename): 

    print 'editing xml file...' 
    tree = xml.ElementTree(file=filename) 
    root = tree.getroot() 
    looks = root[2][1] 

    look_1 = xml.Element('Look_1') 
    look_1.text = 'foobar' 
    looks.append(look_1) 

    with open(filename, 'w') as fn: 
     print 'writing xml file...' 
     tree.write(fn) 
     print 'file write successful' 


if __name__ == '__main__': 

    editXML(assetInfo) 
関連する問題