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

BeautifulSoup4解析Tableau XML写入文件时&符号重复转义问题求助

问题根因

你遇到的是XML特殊字符二次编码问题:

  • BeautifulSoup的XML解析器在写入属性值时,会自动对属性内的&、<、>、单引号、双引号等XML特殊字符做标准转义
  • 你在生成formula_final时提前手动做了XML转义,把单引号转成了&amp;apos;,BS处理时会把字符串里的&再次转义为&amp;,最终就变成了不符合Tableau预期的&amp;amp;apos;
解决方案

第一步:修改公式生成逻辑

不要手动做XML转义,直接输出带原始单引号的普通字符串即可,转义工作交给BS自动处理:

# 拼接公式片段时用Python原生的转义单引号,不要写XML转义符
formula_segment = 'When \'[{}]\' then {} '.format(rows['Column_Name'], rows['Formatted_ColumnName'])
# 其他拼接逻辑保持不变,最终得到的formula_final为不带XML转义的原始公式内容

第二步:修改文件写入逻辑

不要使用str(bs_content)输出,改用BS提供的prettify()方法保证XML格式规范,同时指定UTF-8编码避免乱码:

for calculation in bs_content.find_all('column', {'caption': 'Group By', 'datatype':'string', 'name':'[Calculation_12345678910]'}):
     calculation.find('calculation')['formula'] = formula_final

with open('test.twb', 'w', encoding='utf-8') as file:
  file.write(bs_content.prettify())

特殊情况兼容

如果Tableau对转义格式有特殊要求,BS默认转义结果仍不符合预期,可以在输出后加一次全局替换修正:

with open('test.twb', 'r', encoding='utf-8') as f:
    content = f.read()
# 替换多余的二次转义内容
content = content.replace('&amp;apos;', '&apos;')
with open('test.twb', 'w', encoding='utf-8') as f:
    f.write(content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:07