2015-02-04 3 views
0

Я могу распечатать его на консоли, и это так, как я хочу, но я не могу понять, как его сохранить. XML из образца не изменяется. Я использую довольно большие XML-файлы и функцию iterparse, так как считаю, что это важно.Python: как обновить xml и сохранить в новый xml-файл, используя метод iterparse для чтения и обновления?

Мой код:

def xmlTagMethod(xmlfile, changetag): 
    tree = ET.ElementTree(file=xmlfile) 
    root = tree.getroot() 
    for event, elem in ET.iterparse(xmlfile): 
     if event == 'end': 
      if elem.tag == changetag: 
       elem.set('maxwidth', '20') 
     print elem.attrib 
    tree.write("outPutTagData.xml") 

ответ

0

Вы не делаете никаких изменений tree, поэтому, когда вы пишете, это будет такой же, как и раньше.

Вы просто модифицировать event и elem элементов итератора, возвращаемого ET.iterparse (XMLFILE), который представляет собой совершенно отдельный объект из tree.

Для более простого подхода можно попробовать:

import xml.etree.ElementTree as ET 
def xmlTagMethod(xmlfile, changetag): 
    tree = ET.ElementTree(file=xmlfile) 
    for e in tree.findall(changetag): 
     e.set('maxwidth','20') 
tree.write("outPutTagData.xml") 
+0

ну это на самом деле не имеет значения, если я печатаю его в консоль или в файл. Мне нужен весь XML-файл с обновленными атрибутами. Хотя я не уверен, как это возможно. Лучший способ сделать это - обновить только теги где-нибудь в циклах цикла и сохранить с остальным, что не изменилось. Я бы хотел, чтобы это было как можно быстрее (в настоящее время тестируется на 800 одинаковых тегах (changetag)), и я не уверен, как это сделать. – n0win0u

+0

хорошо это что-то похожее на то, что я делаю, он не обновляет xml или не делает это для вас? (он не работает с моим xml как минимум) – n0win0u