You need to enable JavaScript to run this app. 如何使用Python提取并修改XML文件中指定单个标签的数值
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 04:54:04