解析带命名空间的XML时触发AttributeError:'str'无'text'属性如何修复
报错原因
你在获取VALUE节点时直接调用了.text属性,导致value变量实际存储的是字符串类型,而非XML元素对象,后续尝试给字符串设置.text属性自然会触发AttributeError: 'str' object has no attribute 'text'报错。
修复代码
# 先声明命名空间映射简化查询,避免重复写长URL ns = {'r4': 'http://autosar.org/schema/r4.0'} for ecu_container in root.findall('.//r4:ECUC-CONTAINER-VALUE', ns): short_name = ecu_container.find('.//r4:SHORT-NAME', ns).text if short_name == component: # 核心修复:去掉find后的.text,先拿到VALUE元素对象 value = ecu_container.find('.//r4:VALUE', ns) value.text = str(imageState)
说明
- 新增命名空间映射变量
ns,简化XML查询写法,避免重复拼接长串命名空间URL,减少代码冗余和拼写错误概率 - 可选优化:如果存在
VALUE节点缺失的场景,可以在赋值前增加非空判断,避免节点不存在时触发报错:if value is not None: value.text = str(imageState) - 注意检查
imageState变量的大小写是否和你实际定义的变量名一致,避免出现未定义变量报错
内容的提问来源于stack exchange,提问作者Twowolfs
相关产品推荐
相关产品推荐

