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

如何在XML文件中正确插入&符号 解决ElementTree自动二次转义问题

问题原因

你遇到的是Python标准库xml.etree.ElementTree(简称ET)的默认自动转义机制导致的问题:ET在写入XML属性值时,会自动把所有&字符转义为&。你提前写在var1里的
中的&会被二次转义,最终输出就变成了
,你提前做的replace('&', '&')操作不会生效,因为替换完成后ET生成XML时还会再做一次自动转义。

解决方案

方案1:生成XML字符串后统一替换(推荐,操作最简单)

如果你的需求只是固定输出
实体,直接在ET生成完整XML字符串后做一次全局替换即可:

import xml.etree.ElementTree as ET

# 你的原有XML构造逻辑不变
var1 = '\r\n'
var2 = f' + {res} {na}{var1}'
case = ET.SubElement(
    suite,
    "testcase",
    {
        "name": f"{na}",
        "log": var2
    }
)

# 生成XML字符串后替换目标字符
xml_str = ET.tostring(suite, encoding='unicode')
xml_str = xml_str.replace('\r\n', '
')

# 后续直接用xml_str输出或写入文件即可
print(xml_str)

方案2:临时修改ET转义规则(适合大量自定义实体场景)

如果你需要保留更多自定义XML实体不想被转义,可以临时覆盖ET的属性转义函数:

import xml.etree.ElementTree as ET

# 备份原始转义函数
original_escape = ET._escape_attrib

# 自定义转义逻辑
def custom_escape(s):
    # 先处理< > " '等必须转义的字符
    s = original_escape(s)
    # 把被转义的&amp;还原为&
    return s.replace('&amp;', '&')

# 替换ET默认转义函数
ET._escape_attrib = custom_escape

# 原有XML构造逻辑不变
var1 = '&#xD;&#xA;'
var2 = f' + {res} {na}{var1}'
case = ET.SubElement(
    suite,
    "testcase",
    {
        "name": f"{na}",
        "log": var2
    }
)

# 生成输出
xml_str = ET.tostring(suite, encoding='unicode')
print(xml_str)

# 用完恢复原始转义函数,避免影响其他逻辑
ET._escape_attrib = original_escape

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:57:00