Python对含有命名空间的xml文件中某个标签属性值替换实例

需求:根据ID定位标签,实现修改value属性的值

# -*- encoding:utf-8 -*-

from xml.etree.ElementTree import ElementTree
import sys

def replaceidvalue(idnum,valuenum):
    cvnodeid = idnum
    # 1. 读取xml文件
    tree = ElementTree()
    tree.parse('./applicationContext-quartz.xml')
    # 添加root节点
    # newele = Element('framework')
    # newele.insert(0, tree.getroot())
    # newtree = ElementTree(newele)
    # node = []
    # for n in newtree.iter():
    #     node.append(n)
    '''不添加root节点操作'''
    node = []
    # 获取到xml文件中所有的节点,包括父节点
    for n in tree.iter():
        # 找到每个节点中的所有的tag,也即标签
        node.append(n.tag)

    # 找到父节点下,第一级子节点
    nodes = tree.findall(node[1])
    tmp = []
    tmpvalue = []
    for node in nodes[0:-1]:
        # 把节点的ID共同存入到一个数组中
        tmpvalue.append(node.attrib['id'])
        # 把第二个节点的所以子节点存入到数组中
        tmp.append(node.getchildren()[1])

    # C. 修改节点属性
    cvnumber = len(tmpvalue)
    for i in range(cvnumber):
        if tmpvalue[i] == cvnodeid:
            # 给要修改的属性赋予新值,也即对属性值的修改
            tmp[i].set('value',valuenum)
            break
        else:
            print('未找到想要修改的ID!!!')

    # 6. 输出到结果文件
    tree.write("./out.xml", encoding="utf-8", xml_declaration=True)

# 判断从cmd命令行输入的参数是否为空,执行命令:python 文件名.py 参数1 参数2 参数3.....
# len(sys.argv)计算的是参数的个数,sys.argv是个列表所以只能用len计算个数,不能用count
if len(sys.argv) <= 1:
    exit()
else:
    replaceidvalue(sys.argv[1],sys.argv[2])

执行过程:打开cmd,进入到你存放该脚本的目录下,输入Python 文件名.py 用来定位的属性(也即查询标签的属性) 要修改的值。
上述代码可能不能全部照搬,可以自己做出适当的修改,实现自己想要的功能。

你可能感兴趣的:(Python)