私は見つけたほど多くの関連記事を読んだことがありますが、私は単純な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)
おそらくそのない最もエレガントな解決策が、それは誰もがよりよい解決策を持っている場合、私は興味があると思い、私の目的のために働く必要があります知っている。ありがとう。
'findall'のためのドキュメントは、それがリストを返すと言う....あなたは'ルックス[0] .append(look_1) 'のような何かをする必要がありますか? – user