2016-12-01 9 views
0

私はPythonのxml.etree.ElementTreeライブラリを少し使っています。私は、しかし、パイソンは、メモリにファイルをロードし、そこに編集し、それをフラッシュし、未編集のバージョンを使用しているように見えた。 たとえば、私のプログラムが要素をXMLファイルに追加し、そのXMLファイルを反復処理すると、前に加えた内容は表示されません。PythonのElementTreeでファイルをリフレッシュ

ここに私のコードの要約版です:

をファイルに追加するために:

import xml.etree.ElementTree as ET 
tree = et.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", tag=foo,) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 

私が何か間違ったこと、あるいは「さわやか」の良い方法は何だ、いわばアム、プログラム内のXMLファイルなので、forループを使ってプログラムを反復すると、新しい要素が見えますか?

私はpython 3.5を使用しています。

+0

私が見てきた[この](のhttp:/ /stackoverflow.com/questions/27829575/python-refresh-file-from-disk)、それは適用されないようです。 – prongs95

答えて

0

これは、リフレッシュまたはフラッシングとは関係ありません。要素コンストラクタのシグネチャは次のとおりです。

__init__(self, tag, attrib={}, **extra) 

あなたは暗黙的"element"として指定することに加えて、名前付き引数としてtagに渡しています。あなたはtagは(あなたがElement.getでそれを取得しようとしている方法に基づいて)要素の属性になりたい、次は(いくつかの追加の修正で)動作するはずと仮定:

foo = "foo" 
bar = "bar" 

import xml.etree.ElementTree as ET 
tree = ET.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", {"tag": foo}) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 
+0

これは物事をクリアします。ありがとう! – prongs95

関連する問題