Watch at Ease看见世界,读懂生活。

科技 · 实用指南

ElementTree 报“unbound prefix”?修复 XML 前先证明命名空间

先保留原始字节,区分损坏的完整文档与脱离祖先作用域的片段;只有权威 URI 能证明绑定时才注入命名空间。

Original diagram distinguishing a malformed full XML document from a fragment detached from an ancestor namespace declaration.
原创示意图:区分真正缺少绑定的完整文档与丢失祖先作用域的片段。 Watch at Ease

ElementTree 在限定名称使用的前缀没有处于作用域内的声明时抛出 unbound prefix。同一错误既可能来自无效的完整文档,也可能来自失去祖先 xmlns 声明的有效片段。先保存原始字节,再判断属于哪一种。

不要猜 URI,也不要把 register_namespace() 当作解析修复。应从完整文档、模式、生产者合同或被截断的祖先节点证明绑定;仅在内存包装器中注入已证明的声明,并核对展开名、属性、文本、tail 与修复清单。

修复前保存证据

读取并哈希原始字节,记录解析器、Python 版本、错误行列与附近前缀。原件与修复副本分开保存。

若上游只传了片段,要明确记录截断边界;这不同于生产者输出无效完整文档。

先判定作用域为何丢失

检查完整文档与祖先链的 xmlns。祖先存在声明时,从权威父文档或合同恢复精确 URI;没有依据就拒绝或隔离。

同一个前缀在不同作用域可映射不同 URI,只看拼写不是身份依据。

分开解析、查询和序列化控制

register_namespace() 影响输出前缀,find() 的映射影响树上的查询,二者都不能修复未声明前缀的输入。

URI 有权威证据时,只在内存包装器增加一个声明,保留源摘要并记录变更。

隔离宽松恢复

宽松解析器可能闭合标签、丢弃 token 或改动无关结构,只能用于取证提取。

比较恢复结果与不可变原件,列出全部诊断;变更超过已证明绑定就不通过。

按语义身份验收

断言预期 {URI}local 元素和属性、节点数、顺序、文本、tail 与业务标识。

保存原件摘要、URI 来源、包装变换、诊断与验收结果;能解析不等于语义未变。

Original acceptance diagram that verifies expanded names, attributes, text, tail content, and a bounded repair manifest.
原创示意图:解析成功后仍要核对展开名、属性、文本与修复清单。 Watch at Ease