2016-08-26 1 views
1

Использование ElementTree для анализа значения атрибута в качестве XML и писать новый файл XML. Он будет обновлять новое обновленное значение и записывать новый файл. Но не будет никаких изменений в новом файле. Пожалуйста, помогите мне понять, что я делаю неправильно. Вот XML & Python код:Python ElementTree не обновит новый файл после разбора

XML

<?xml version="1.0"?> 
<!-- 
--> 
    <req action="get" msg="1" rank="1" rnklst="1" runuf="0" status="1" subtype="list" type="60" univ="IL" version="fhf.12.000.00" lang="ENU" chunklimit="1000" Times="1"> 
     <flds> 
      <f i="bond(long) hff" aggregationtype="WeightedAverage" end="2016-02-29" freq="m" sid="fgg" start="2016-02-29"/> 
      <f i="bond(short) ggg" aggregationtype="WeightedAverage" end="2016-02-29" freq="m" sid="fhf" start="2016-02-29"/> 
     </flds> 
    <dat> 
     <r i="hello" CalculationType="3" Calculate="1" /> 
    </dat> 
</req> 

Python

import xml.etree.ElementTree as ET 

with open('test.xml', 'rt') as f: 
    tree = ET.parse(f) 

for node in tree.iter('r'): 
    port_id = node.attrib.get('i') 
    new_port_id = port_id.replace(port_id, "new") 
    print node 

tree.write('./new_test.xml') 

ответ

1

Когда вы получаете атрибут i, и назначить его port_id, вам просто имеют регулярную строку Python. Вызов замены на нем - это всего лишь строка Python .replace().

Вы хотите использовать .set() метод узла etree:

for node in tree.iter('r'): 
    node.set('i', "new") 
    print node 
Смежные вопросы