python处理xml中html实体的核心方法有三:一是用html.unescape预处理再解析;二是为xml解析器自定义EntityResolver映射HTML实体;三是对HTML本质内容直接用lxml.html.fromstring宽容解析。

Python中处理XML里的HTML实体(比如 、<、'等),关键在于区分“XML原生实体”和“HTML定义的额外实体”。XML标准只认&amp;、<、>、&quot;、'这5个,其余如 或©属于HTML规范,在纯XML解析器里默认会报错。
用html.unescape预处理HTML风格的XML内容
如果XML字符串实际混用了HTML实体(常见于网页抓取、富文本导出等场景),最直接的办法是先用html.unescape()把所有HTML实体转成对应Unicode字符,再交给XML解析器处理:
- 适用于已知内容含大量HTML实体、且你信任数据来源的情况
- 注意:该方法会无差别转换,包括可能存在的合法XML实体(如
&amp;→&amp;),所以建议在解析前做一次“双重转义”清理,或确保原始内容没嵌套转义 - 示例:html.unescape(&quot;
Hello World
JSON的简单用法 中文WORD版本文档主要讲述的是JSON的简单用法;JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
1 立即学习“Python免费学习笔记(深入)”;
&quot;) → &quot;
Hello World
立即学习“Python免费学习笔记(深入)”;
&quot;
自定义EntityResolver绕过未声明实体错误
若需保留XML解析流程(如用xml.etree.ElementTree或lxml),又不想预处理字符串,可为解析器注入自定义实体映射。以lxml为例:
- 创建
etree.XMLParser()并传入resolve_entities=False禁用默认实体解析 - 配合
etree.DTD或重写EntityResolver,把nbsp、copy等映射到对应Unicode码点 - 例如:{&quot;nbsp&quot;: &quot;u00a0&quot;, &quot;copy&quot;: &quot;u00a9&quot;}
用lxml.html.fromstring更宽容地解析混合内容
当XML实质是HTML片段(如邮件正文、cms导出内容),直接用lxml.html.fromstring()比etree.fromstring()更合适:
基本上就这些。核心思路是:明确数据本质——是真XML就补DTD或预清理;是HTML就换html解析器。别硬扛着用标准XML解析器去读带®的“伪XML”,容易卡在第一行。