如何入门使用Python ElementTree模块进行XML操作?

2026-04-29 13:152阅读0评论SEO问题
  • 内容介绍
  • 相关推荐

本文共计932个文字,预计阅读时间需要4分钟。

如何入门使用Python ElementTree模块进行XML操作?

不是它不能,而是默认忽略命名空间空间 — 所有的带有 xmlns 或前缀(如 ns:tag)的节点,在未明确声明时会被当作普通标签处理,find() 和 findall() 会直接找不到。

  • 必须把命名空间映射成字典,例如:{'ns': 'http://example.com/ns'}
  • 所有 XPath 查询中,标签名前要加前缀:'.//ns:item',不能写 './/item'
  • root.findall('.//ns:item', ns_map),其中 ns_map 是命名空间字典
  • 如果 XML 中是默认命名空间(xmlns="http://..."),前缀不能为空字符串,得设一个占位符,比如 {'d': 'http://...'},再查 './/d:tag'

ElementTree.parse()ParseError: not well-formed 怎么办?

常见于文件含 BOM、编码不匹配或混入控制字符。Python 3 默认按 UTF-8 解析,但 Windows 记事本保存的 XML 常带 UTF-8 BOM,而 parse() 不自动跳过。

阅读全文

本文共计932个文字,预计阅读时间需要4分钟。

如何入门使用Python ElementTree模块进行XML操作?

不是它不能,而是默认忽略命名空间空间 — 所有的带有 xmlns 或前缀(如 ns:tag)的节点,在未明确声明时会被当作普通标签处理,find() 和 findall() 会直接找不到。

  • 必须把命名空间映射成字典,例如:{'ns': 'http://example.com/ns'}
  • 所有 XPath 查询中,标签名前要加前缀:'.//ns:item',不能写 './/item'
  • root.findall('.//ns:item', ns_map),其中 ns_map 是命名空间字典
  • 如果 XML 中是默认命名空间(xmlns="http://..."),前缀不能为空字符串,得设一个占位符,比如 {'d': 'http://...'},再查 './/d:tag'

ElementTree.parse()ParseError: not well-formed 怎么办?

常见于文件含 BOM、编码不匹配或混入控制字符。Python 3 默认按 UTF-8 解析,但 Windows 记事本保存的 XML 常带 UTF-8 BOM,而 parse() 不自动跳过。

阅读全文