2013-05-12 72 views
0

我正在嘗試更改xml文檔中的許多值。我嘗試了幾個不同的東西,但他們似乎沒有改變任何東西,但他們確實似乎訪問該文件,因爲修改時間發生了變化,但該值並不是。更改xml文件中的值

from xml.etree import ElementTree as et 
import os 
import xml 

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml') 
et = et.parse(path) 

for name in et.findall('name'): 
    if name == 'sometext1': 
     name.text = "sometext2" 
et.write(path) 

其次試過,但我得到一個AttributeError的:「海峽」對象有沒有屬性「文本」

with open(path,'r+') as f: 
tree = et.parse(f) 

for node in tree.iter('favourite'): 
name = node.attrib.get('name') 

if name == 'sometext1': 
    name.text = "sometext2" 
tree.write(path) 

誰能勸哪裏伊夫出了錯

+0

'name'是元素的名稱。 'node'是元素。 – Blender 2013-05-12 23:46:36

回答

0
  • et = et.parse(path) 
    

    使用et作爲右側模塊和作爲 左側的變量名稱。在此之後,不可能(或者至少非常難) 訪問ElementTree模塊。所以消除歧義et。例如,假設 ET是模塊,並且treeElementTree

  • 在for循環中,name是一個元素,因此將name與 字符串進行比較將始終爲False。而是使用

    name.text == 'sometext1' 
    

from xml.etree import ElementTree as ET 
import os 

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml') 
tree = ET.parse(path) 

for name in tree.findall('name'): 
    if name.text == 'sometext1': 
     name.text = "sometext2" 
     print(name) # for debugging only 
tree.write(path) 
+0

我已經嘗試了這些更改,但仍然沒有發生xml文件的更改。 – Syborg 2013-05-13 07:03:19

+0

你確定'tree.findall('name')'是查找元素嗎?嘗試在循環中放入一個'print'語句,以便查看是否找到元素。 (可能找不到''元素的原因之一是因爲您可能需要在[namespace](http://en.wikipedia.org/wiki/XML_namespace)中引用它。) – unutbu 2013-05-13 10:42:47