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、修改的目标


  ...
  
    ...
    
    
    ...
  
  ...

目标是根据第二个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()

 

你可能感兴趣的:(python修改xml文件标签的属性值)