用.find()取嵌套数据:root.find('author');路径需匹配当前节点层级,命名空间须显式声明如'{ns}tag';修改后需et.tostring(elem, encoding='unicode')显式序列化。

用 xml.etree.ElementTree 读取 XML 后,怎么拿到嵌套层级里的数据?
ElementTree 解析后得到的是树状对象,不是扁平字典。想取 <book>@#@#@#@#@#@#@#@#@#@0;</book>)会让所有标签带上隐式前缀,直接 root.find('item') 必然失败。
- 必须用带命名空间的路径:
root.find('{@#@#@#@#@#@#@#@#@#@1') - 更稳妥是定义命名空间映射字典:
ns = {'rdf': '@#@#@#@#@#@#@#@#@#@2#'},再用root.find('rdf:RDF', ns) - 注意:命名空间 URI 必须完全一致,多一个斜杠、少一个字母都不匹配
-
ET.register_namespace()只影响输出时的前缀声明,不影响查找逻辑
别试图用正则去掉 namespace 再解析——破坏结构,且 ET 不保证解析后保留原始前缀,靠字符串处理不可靠。
实际项目里,命名空间问题往往拖慢半天,因为错误信息不提示“namespace mismatch”,只安静地返回 None。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











