Python使用ElementTree解析XML查找diagnosticEcgSpeed对应的val属性值
解决方案
错误原因
你使用的XPath表达式".//*[@lid='diagnosticEcgSpeed']"通过通配符*匹配所有节点,存在匹配到非setting节点的风险,出现KeyError: 'val'的核心原因是find方法返回的节点没有val属性,说明实际匹配到的节点不符合预期。另外部分旧版本的xml.etree.ElementTree对通配符的属性查询支持存在兼容问题,也可能导致匹配异常。
修复方案
- 明确指定要匹配的节点为
setting,避免无关节点干扰 - 增加非空判断,避免节点不存在时抛出属性访问异常
修复后代码如下:
import xml.etree.ElementTree as ET tree = ET.parse('basics.xml') root = tree.getroot() # 明确指定匹配setting节点,避免通配符匹配异常 target_node = root.find(".//setting[@lid='diagnosticEcgSpeed']") if target_node is not None and 'val' in target_node.attrib: y = target_node.attrib['val'] print(y) else: print("未找到目标节点或节点无val属性")
运行上述代码即可正确输出目标值-1,如果需要验证匹配结果,可以在获取target_node后新增打印语句查看节点详情:
print(target_node.tag) print(target_node.attrib)
内容的提问来源于stack exchange,提问作者psad
相关产品推荐
相关产品推荐

