2016-04-20 20 views
0

I次のコードを持っている:私はそれを実行したときにXML属性の変更は保存されない

def incrCount(root): 
    root.attrib['count'] = int(root.attrib['count']) + 1 
    # root.set('count', int(root.attrib['count']) + 1) 

root = getXMLRoot('test.xml') 
incrCount(root) 
print root.attrib['count'] 

、正しい値が印刷されたが、その変更は、実行の終了時にファイルに表示決してありません。私は上記の両方の方法を成功しないように試みました。誰かが私が間違っていた箇所を指摘できますか?

+1

ElementTreeroot参照インスタンスを仮定すると、あなたは、この目的のためにElementTree.write()方法を使用することができます。それらをファイルに入れたい場合は、自分で書き込む必要があります。 [tostring](https://docs.python.org/3.5/library/xml.etree.elementtree.html#xml.etree.ElementTree.tostring)を使用して、結果を '' wb ''モードで開いたファイルに書き込みます。 – bbayles

+0

@bbaylesファイルを直接変更できると思った。しかし、私はETモジュールで何かを見つけることを望んでいました。しかたがない。その場合、メソッドの設定はいつ有効ですか? – mjr

+0

ファイルはディスクからテキストのストリームとして読み込まれ、メモリ内のノードに解析されます。保存されると(明示的に)、その逆が起こります。大きなファイルの属性を追加または変更するために、残りのテキストをシャッフルする際のオーバーヘッドを考慮してください。 – Mike

答えて

1

ドキュメント(19.7.1.4. Modifying an XML File)に例示されているように、すべての変更操作が実行された後、ファイルに書き戻す必要があります。変更はメモリ内でのみ作られています

..... 
root = getXMLRoot('test.xml') 
incrCount(root) 
print root.attrib['count'] 
root.write('test.xml') 
+0

完璧!ありがとう – mjr

関連する問題