2016-04-20 41 views
0

我有以下代碼: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

的變化只在內存製造。如果你想讓他們進入一個文件,你需要自己寫。使用[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)中所示,您需要在完成所有修改操作後回寫到文件。假設ElementTreeroot引用例如,你可以使用ElementTree.write()方法用於此目的:

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

完美!謝謝 – mjr