在python中ET.iterpase()如何通过XML.osm更改attrib值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (193)

我试图写一个XML元素的新属性值,而它在for循环中是ET.interparse()。 关于如何做到这一点的建议?

我希望避免打开整个XML文件,因为它非常大,这就是为什么我一次只在Start事件中打开一个元素的原因。

下面是我的代码:

import xml.etree.cElementTree as ET

def 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()
提问于
用户回答回答于

很明显,如果不打开整个XML文件,然后再重写整个XML文件,就不可能做到这一点。

1)不能将属性写回元素

2)“如果不重写整个文件,就不可能用更短或更长的文本替换文件中的文本。

扫码关注云+社区

领取腾讯云代金券