需求:根据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 用来定位的属性(也即查询标签的属性) 要修改的值。
上述代码可能不能全部照搬,可以自己做出适当的修改,实现自己想要的功能。