python修改xml文件标签的属性值

首先需要说明的是,直接修改一个xml文件是不太现实的,我们能做的是将xml文件中的所有文本读出来,修改文本的内容之后将其写入到一个新的文件中,只是多了一步写入的过程,其实也挺简单的。

python读写xml有两个包,一个是xml.dom.minidom,一个是xml.etree.ElementTree,但是前者我实在没找到实现方法,所以用的时是后者。

这里要非常感谢:https://www.cnblogs.com/insane-Mr-Li/p/9963875.html,对于xml.etree.ElementTree的功能写得非常详细

1、修改的目标

<osm>
  ...
  <way>
    ...
    <tag k="highway" v="living_street" />
    <tag k="name" v="广州环城高速六车道" />
    ...
  </way>
  ...
</osm>

目标是根据第二个tag标签里面的v的车道数,修改第一个tag标签中的v的值

2、代码

import xml.etree.ElementTree as xee

laneDict = {'双车道': 'trunk1', '四车道': 'trunk2','六车道': 'trunk3','八车道': 'trunk4'}

def  laneChange():
    # 读取文件
    domTree = xee.parse("highwaySingleDirectUpout.osm.xml")
    # 获得所有节点内容
    root = domTree.getroot()
    # 获得所有标签是"way"的节点内容
    ways = root.findall("way")
    # 逐个修改
    for way in ways:
        # 获得所有标签是"tag"的节点内容
        laneTag = way.findall("tag")
        # 获取车道数信息,因为我的一个way中的tag节点只有两个
        # 这里获取的是第二个tag中的属性"v"内容的最后三个字,例如“双车道”、“四车道”等
        lanStr = laneTag[1].get("v")[-3:]
        # 这里重新设置节点的属性内容
        # 我是需要重设第一个tag节点中属性"v"的内容,修改为"trunk1"、"trunk2"等
        laneTag[0].set("v",laneDict[lanStr])
        # print(laneTag[0].get("v"))
    # 修改完成之后写入到新的xml文件中,这里与minidom有些不同的是:用到的是domTree而不是root
    # 因为有汉字,所以编码设置为utf8,防止乱码
    domTree.write("highway.osm.xml",encoding="utf8")


if __name__=="__main__":
    laneChange()

 

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值