You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用objectify解析XML时hasattr确认存在的text属性getattr返回None

问题根源

你遇到的是lxml.objectify的原生属性和XML子节点命名冲突问题:

  • lxml.objectify封装的XML元素本身自带text原生属性,用途是存储当前节点的直接文本内容,优先级高于同名子节点的属性映射
  • hasattr(self.xml_data, 'text')返回True是因为检测到了元素自带的原生text属性,不是你要的子节点
  • 你的prod根节点没有直接文本内容,所以调用getattr(self.xml_data, 'text')拿到的是原生text属性的空值None,vars输出里的元素是子节点映射,被原生属性覆盖了
  • uri属性可以正常读取是因为uri不是lxml元素的原生属性,不会触发冲突

解决方法

你可以任选以下两种方式读取子节点,避免命名冲突:

  1. 沿用你已经验证可用的find方法
cdef textt = self.xml_data.find('text')
  1. 用objectify的字典式访问明确取子节点,这种方式不会触发原生属性查找
cdef textt = self.xml_data['text']

修改后你的原有逻辑不需要做其他调整,就能正常读取name属性了。

内容的提问来源于stack exchange,提问作者DeadSec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:36:00