如何使用Python提取并修改XML文件中指定单个标签的数值
问题原因
AttributeError: 'NoneType' object has no attribute 'text'报错的核心原因是xml.etree.ElementTree的find()方法默认仅查找当前节点的直接子节点,你要读取的IntakeFanSpeedMax、IntakeFanSpeedMin标签嵌套在多层节点下,直接从根节点查询找不到对应元素,返回None后调用.text属性就会触发报错。
另外注意你贴出的XML示例存在标签未闭合问题(PowerStateMonitor2、PowerStateMonitor、Setup节点缺少闭合标签),实际运行前请确保你的本地XML文件格式合法,否则解析阶段就会报错。
读取+修改的完整代码示例
import xml.etree.ElementTree as ET # 替换为你的本地文件路径 file_path = "C://Users//...//Documents//RobotManagerSettings.xml" # 解析XML文件 tree = ET.parse(file_path) root = tree.getroot() # 方式1:写全节点层级路径查询 # intake_max = root.find('Setup/PowerStateMonitor/PowerStateMonitor2/Pmu/IntakeFanSpeedMax').text # intake_min = root.find('Setup/PowerStateMonitor/PowerStateMonitor2/Pmu/IntakeFanSpeedMin').text # 方式2:用xpath全局匹配(忽略层级直接查找对应标签,适合节点名唯一的场景) intake_max = root.find('.//IntakeFanSpeedMax').text intake_min = root.find('.//IntakeFanSpeedMin').text print(f"当前最大进气风扇转速:{intake_max} RPM") print(f"当前最小进气风扇转速:{intake_min} RPM") # ------------------ 更新数值 ------------------ # 示例:将最大转速改为4800,最小转速改为1200,注意赋值必须为字符串类型 root.find('.//IntakeFanSpeedMax').text = '4800' root.find('.//IntakeFanSpeedMin').text = '1200' # 保存修改后的文件,保留XML声明 tree.write(file_path, encoding='utf-8', xml_declaration=True)
注意事项
- 赋值节点内容时必须传入字符串,直接传入整数等类型会触发保存错误
- 保存参数添加
xml_declaration=True可以保留原文件开头的XML版本声明 - 原XML根节点带有
Checksum校验字段,修改配置后如果业务逻辑要求校验值匹配,需要同步更新该字段,否则修改后的配置文件可能无法被设备正常识别
内容的提问来源于stack exchange,提问作者Sagar H
相关产品推荐
相关产品推荐

