etree适合通用XML处理,提供标准DOM接口,保留XML原始语义;objectify是其高层封装,将XML映射为Python对象,支持点号访问和自动类型转换,但要求结构规整、不支持混合内容。

etree 是 lxml 的通用 XML 处理模块,适合大多数 XML 解析、构建和修改场景;objectify 是基于 etree 的高层封装,把 XML 元素自动映射成 Python 对象,适合结构固定、想用点号访问的简单数据场景。
核心定位不同
etree 提供的是标准 DOM 风格的树形操作接口,保留 XML 的原始语义(如文本、属性、命名空间、混合内容等),控制力强、灵活性高;objectify 则主动“忽略”部分 XML 复杂性(比如不区分文本与子元素的边界),把 XML 当作数据容器来简化访问,牺牲通用性换易用性。
访问方式差异明显
- 用 etree 时,取属性要写
elem.get('attr'),取子元素要写elem.find('child')或elem.xpath(),文本内容需显式访问elem.text - 用 objectify 时,可直接写
obj.child、obj.child.text、obj.child.@attr(注意@表示属性),甚至支持obj.child[0]访问同名多个子节点
对 XML 结构的容忍度不同
objectify 要求 XML 结构较规整:同级同名元素会被自动转为列表,但若混用文本和子元素(例如 <p>hello<b>world</b>.</p>),它会把整个 p 的文本内容丢掉,只保留子元素——这种混合内容在 etree 中可精确处理,objectify 则不推荐使用。
类型转换是 objectify 的特色功能
objectify 能根据 XML 属性(如 xsi:type="int")或约定自动把字符串内容转成 Python 基本类型:obj.number 可能直接是 int 类型,不用手动 int(elem.text)。etree 不做这类隐式转换,所有内容默认都是字符串或 Element 对象。
立即学习“Python免费学习笔记(深入)”;
基本上就这些。选 etree 更稳妥通用,适合开发库或处理复杂 XML;用 objectify 更快上手,适合读配置、API 返回的扁平数据——但别指望它处理 XHTML 或带注释/CDATA 的文档。










