首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中通过XML.osm更改ET.iterpase()时的属性值

在python中通过XML.osm更改ET.iterpase()时的属性值
EN

Stack Overflow用户
提问于 2018-06-21 01:56:47
回答 1查看 26关注 0票数 0

当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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 06:03:02

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

1)您不能将属性写回元素(虽然您实际上可以这样做,但这将是困难、耗时和不优雅的)

2)“在不重写整个文件的情况下,用更短或更长的文本替换文件中的文本在物理上是不可能的。(唯一的例外是”完全相同的文本长度“和”数据在最后“。)

下面是usr2564301对您提出的关于在不打开整个XML文档的情况下更改元素属性值的问题的评论。

不可能工作的

。XML处理不知道数据来自文件,因此它不能在文件中完全相同的位置“写回”更改后的值。即使它可以:在不重写整个文件的情况下,用更短或更长的文本替换文件中的文本在物理上是不可能的。(唯一的例外是“文本长度完全相同”和“数据在最后”。)- usr2564301

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50954387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档