Python lxml objectify怎么让XML访问像对象属性一样简单

admin 百科 8
lxml.objectify 解析 XML 后支持类属性访问,但要求标签名是合法 Python 标识符;非法命名需用 obj["name"] 或 getattr(obj, "name");文本用 .text、属性用 .attrib;重复元素自动转 list;须用 hasattr 或 try/except 安全访问。

Python lxml objectify怎么让XML访问像对象属性一样简单-第1张图片-佛山资讯网

lxml.objectify 解析 XML 后,确实可以让访问像操作 Python 对象属性一样直观——但前提是 XML 结构规范、命名合法,且你理解它的“对象化”规则。它不是万能的点号访问器,而是有明确映射逻辑的轻量封装。

确保 XML 标签名是合法的 Python 标识符

objectify 会把 XML 元素名直接转成属性名,所以如果标签含连字符、数字开头或空格(比如 <user-id></user-id>),就不能用 obj.user-id(语法错误)。这时得用字典式访问:

  • obj["user-id"]
  • getattr(obj, "user-id") ✅(配合 hasattr 判断更安全)
  • obj.user_id ❌ 不会自动转换,除非你预处理 XML 或用 objectify.deannotate + 自定义命名规整

区分元素、文本和属性:text 和 attrib 是关键词

XML 中的文本内容不挂在属性上,而是通过 .text 访问;属性值则统一收在 .attrib 字典里:

<person name="Alice" age="30">Engineer</person>

登录后复制

  • obj.name → 报错(name 是属性,不是子元素)
  • obj.attrib["name"]"Alice"
  • obj.text"Engineer"
  • obj.age → 报错(同理,age 是属性)

处理重复子元素:自动转为 Python list

如果某个标签出现多次(如多个 <item></item>),objectify 会把它变成 list,而不是单个对象:

标签: python ai

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~