You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用etree解析含转义HTML的XML时el.text返回未转义内容的问题

现象原因

XML解析器默认会自动解码节点文本中的5个XML预定义实体:<、>、&、"、',调用.text获取节点内容时,这些实体会被转换为对应的原始字符。
你给出的示例中,XML源里的&amp;lt;是两层转义的结果:XML解析时&amp;会被解码为&,拼接后续的lt;就得到了&lt;,所以你最终拿到的文本里<i>标签还是转义状态,属于XML解析的正常行为。

已转义HTML是否需要二次转义

根据你的存储目的决定:

  • 如果你希望存储的是纯文本形态的HTML源码(展示时要显示<i>这类标记,而非渲染为斜体效果),写入XML前需要对HTML源码做一次实体转义,XML解析后刚好能得到纯文本形态的HTML代码
  • 如果你希望存储的是可直接渲染的格式化HTML,不需要二次转义,直接将HTML内容放入XML的<![CDATA[ ]]>块中存储即可,避免XML解析器把HTML标签识别为XML节点。
同时兼容两种展示需求的配置方案

推荐两种可落地的实现方式:

  • 字段拆分方案
    为同一内容设置两个独立的存储字段:
    • formatted_content:存放原始未转义的HTML,写入到XML的CDATA块中,需要展示格式化效果时直接读取输出即可
    • plain_content:存放转义后的纯文本HTML源码,需要展示代码形态时直接读取输出即可
  • 动态处理方案
    所有内容统一存原始未转义的HTML到CDATA块中,渲染时根据需求实时处理:
    • 纯文本展示场景:调用对应语言的HTML实体转义方法(比如Python的html.escape()、JS的textContent赋值)对内容做转义后输出
    • 格式化展示场景:直接输出原始HTML内容即可

不建议用多层转义的方式兼容两种场景,会大幅提升逻辑复杂度,还容易出现转义层数混乱的异常。

内容的提问来源于stack exchange,提问作者Malvinka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:15:04