扩展库 / xml.etree

xml.etree

按元素组织的轻量 XML 读写。

适合读取配置与构建简单 XML;路径查询只支持直接子元素和 //name 后代匹配,并非完整 XPath。解析文本按显式字节长度直接传入,不创建整份输入的 Buffer 副本。

2026-10-30:修复 parse/load/stringify/save 错误状态首次初始化失败后被清错并继续操作,文本输出沿用同一检查,初始化失败不覆盖原目标。三包 15 入口 Windows 270 / Linux 257 场景通过,两平台旧桥接各 60 场景失败;四线程 144 诊断的 GCC/TCC JIT/AOT、各 19 份普通 AOT、58 实际 C 原型及 Linux ASan/UBSan 通过。ABI、类声明、Expat 与冻结 XRT 不变。

当前仍待 M9/M3:默认门禁运行部分通过,末项公开 Reader 类型正例失败,Element/Node 另验也未导出。不以工厂返回路径通过或不安全公开原生构造来签收;旧通过记录不覆盖新正例。门禁保留现场,完整范围见 SAX 共用审查记录与包 README。

2026-10-26 当前 Windows/Linux 三包联合默认门禁均通过:严格 C、Linux ASan/UBSan、语言 JIT、中央/边界/分配与公开双语范例独立 EXE,以及 DOM/ElementTree 往返。旧 VFS 和共享快照缺失不再复现。Element 尚不能在包外命名;原生句柄构造器的安全边界修复前,本包仍待签收。

2026-10-24:Windows 三包联合门禁的 C/XLang 边界、DOM/ElementTree 往返及三包各自的边界、分配、范例独立 EXE 全部通过;Linux C ASan/UBSan 与 XLang JIT 双语门禁通过。Linux 独立 EXE 本轮未验收。下方旧缺符号记录只描述当时的发布物。

API

接口用途
xml.etree.create / parse / load创建元素或解析 XML
Element.child / append / set操作子元素和属性
Element.find / findAll执行受限的路径查询
Element.stringify(...) / save(...)序列化或原子保存元素树

范例

import xml.etree
auto root = xml.etree.parse("<catalog><book id='xlang'/></catalog>")
auto book = root.find("book")
assert book.get("id") == "xlang"

DTD 和外部实体被拒绝;C 解析接管 Reader 时,关闭失败按底层错误返回 MEMORY 或 IO,不返回未确认关闭的元素树。XLang 显式解析限额必须为正,C 的 XRT 限额配置以 0 表示不限制;写出缩进为 0..16。名称遵循 XML 1.0,创建非法名称会报错;写出拒绝非法字符、注释和处理指令。属性空白与文本回车往返保持原值;保存失败不会覆盖已有文件。树释放、后代查询和写出可处理调用方放宽限额后的深树,8192 层及分配故障已有 C 回归。C 调用方须释放 findAll 数组内已保留的元素引用,详见包内 README。共享 Linux 门禁通过 C ASan/UBSan、三包 XLang 边界及双语范例逐字对照。

2026-10-21 保存与流写出的分配故障按内存错误报告,不再误报 IO;真实写入/关闭失败仍按 IO 报告。C 保存逐点故障、流写入错误和 XLang save() 异常分类及恢复通过 Windows/Linux 联合门禁;完整 AOT 阻断未变。

C 的空输出 Writer、NULL 或空保存路径在序列化前报告 ARGUMENT,不误报为 IO 或先执行耗费内存的写出;对应负例与现有正常输出通过 Windows/Linux 三包联合门禁。2026-10-26 双平台完整运行门禁通过;剩余的公开类型边界见包内 README。

2026-10-20 三包共用门禁增加 ElementTree 范例固定 UTF-8 黄金输出,Windows 快速模式与 Linux ASan/UBSan 联合门禁通过。默认 AOT 门禁先在 SAX 构建处遇到共享 xl6ValueDataSnapshotV1 缺符号,ElementTree AOT 尚未执行到,不作发布级签收。

Load(path) 打开 Reader 时的分配失败现在报告 MEMORY,不再误报 IO;C 注入失败和清除后重试通过 Windows/Linux 三包门禁。完整带输出 AOT 仍未签收。