繁華開滿天機(jī)
2021-03-28 16:14:18
我正在嘗試ET.interparse()在for循環(huán)中編寫XML元素的新屬性值。有關(guān)如何執(zhí)行此操作的建議?我想避免打開整個(gè)XML文件,因?yàn)樗艽?,這就是為什么我一次只在start事件中打開一個(gè)元素的原因。這是我的代碼:import xml.etree.cElementTree as ETdef main_function: osmfile = 'sample.osm' osm_file = open(osmfile, 'r+') for event, elem in ET.interparse(osm_file, events=('start',)): if elem.tag == 'node': for tag in elem.iter('tag'): if is_addr_street_tag(tag): # Function returns boolean cleaned_street_name = cleaning_street(tag.attrib['v']) # Function returns cleaned street name ##===================================================## ## Write cleaned_street_name to XML tag attrib value ## ##===================================================## osm_file.close()
1 回答

富國滬深
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
BLUF:顯然,如果不打開整個(gè)XML文件然后再重寫整個(gè)XML文件,就不可能做到這一點(diǎn)。
1)您不能將屬性寫回到元素(盡管實(shí)際上可以,但是會(huì)很困難,費(fèi)時(shí)且不雅致)
2)“從物理上講,如果不重寫整個(gè)文件,就不可能用較短或較長的文本替換文件中的文本。(唯一的例外是“長度完全相同的文本”和“數(shù)據(jù)在最后”。 )”
這是來自u(píng)sr2564301的評(píng)論,涉及與您有關(guān)的一個(gè)問題,該問題涉及在不打開整個(gè)XML文檔的情況下更改元素的屬性值。
那可能行不通。XML處理不會(huì)意識(shí)到數(shù)據(jù)來自文件,因此無法在文件中完全相同的位置“回寫”更改后的值。即使可以:在沒有重寫整個(gè)文件的情況下,用較短或較長的文本替換文件中的文本在物理上也是不可能的。(唯一的例外是“長度完全相同的文本”和“數(shù)據(jù)在最后”。)– usr2564301
添加回答
舉報(bào)
0/150
提交
取消