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

如何使用lxml解析XML时保留转义字符不还原?

如何让lxml读取XML字符串时保留转义字符不还原

lxml作为遵循XML规范的解析库,默认会自动解析XML实体引用(比如&转成&、'转成'),所以你写的测试代码会失败——'会被逐层解析成'。

要保留原始的转义序列,核心思路是提前把字符串里的&转义成&,让解析器把转义后的'解析回',这样最终得到的文本就和原字符串一致了。

修改后的测试代码如下:

from lxml import etree

def test_etree_parse():
    test_str = "Text's escaped"
    # 转义字符串中的&,避免lxml解析原始实体
    escaped_str = test_str.replace("&", "&")
    xml = etree.XML(f"<root>{escaped_str}</root>")
    assert xml.find(".").text == test_str  # 现在测试会通过

原理很简单:原字符串里的&amp;apos;会被替换成&amp;amp;apos;,当lxml解析这个XML时,会先把&amp;转成&,最终得到的文本就是Text&amp;apos;s escaped,和你的test_str完全匹配。

如果是从外部文件读取XML内容,也可以先读取全部文本,执行相同的替换操作后再交给lxml解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:04:57