2016-12-01 21 views
0

我一直在使用python的xml.etree.ElementTree庫一點點,主要是玩弄它。然而,我注意到,python似乎將文件加載到內存中並在那裏編輯它,然後刷新它,並繼續使用未編輯的版本。例如,如果我的程序將一個元素添加到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) 

您在tag傳遞作爲另外一個命名參數隱含其指定爲"element"。假設你要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