2013-05-12 2 views
0

Я пытаюсь изменить многочисленные значения в XML-документе. Я попробовал пару разных вещей, но они, похоже, ничего не меняют, но они, похоже, обращаются к файлу, поскольку изменение времени изменения изменяется, но значение doesnt.Изменение значений в 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) 

Может кто-нибудь посоветует, где Ive пошло не так

+0

'name' это имя элемента. 'node' - это элемент. – Blender

ответ

0
  • Линия

    et = et.parse(path) 
    

    использует et как модуль справа и как имя переменной на слева. После этого невозможно (или, по крайней мере, слишком сложно) получить доступ к модулю ElementTree. Так disamiguate et. Пусть, скажем, ET - модуль, а tree - ElementTree.

  • В цикле for name является элементом, поэтому сравнение name с строкой всегда будет ложью. Вместо того, чтобы использовать

    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

+0

Вы уверены, что 'tree.findall ('name')' находит элементы? Попробуйте поместить оператор 'print' в цикле, чтобы вы могли видеть, найдены ли элементы. (Одна из причин '' элементов может быть не найдена, потому что вам может понадобиться ссылаться на нее в [пространство имен] (http://en.wikipedia.org/wiki/XML_namespace).) – unutbu

Смежные вопросы