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

Workday集成:XML转CSV的XSLT转换&符号报错问题咨询

解决Workday集成中XSLT转XML到CSV的&符号输出问题

问题本质

报错The reference to entity "E" must end with the ';' delimiter是因为输入XML不合法:XML中出现了未正确转义的&符号(比如业务数据是M&E,但XML里直接写了M&E,没有转义为M&E)。XML解析器会把&E当作未完成的实体引用,因此抛出错误。

你尝试的<xsl:value-of select="replace(., '&amp;', '&amp;')"/>完全无效——它只是把&替换成&,没有解决任何问题,而且如果XML本身不合法,XSLT处理器根本无法启动转换。

解决方法

1. 修复输入XML的合法性(最优方案)

如果能控制Workday输出的XML格式,确保所有&符号都转义为&amp;。比如原始业务数据中的M&E,在XML中必须写成:

<target-element>10337,ACMC,20240601,ACD,000M&amp;E</target-element>

这样XML解析器能正常识别,XSLT处理时直接用<xsl:value-of select="."/>就能输出10337,ACMC,20240601,ACD,000M&E到CSV,实现原样输出&的需求。

2. 无法修改输入XML时的预处理方案

如果无法调整Workday的XML输出,需要先对不合法的XML进行预处理,把所有未转义的&替换为&amp;。比如用Python脚本预处理:

with open('workday_input.xml', 'r') as f:
    xml_content = f.read()
# 替换未转义的&,同时避免重复转义已有的&amp;
xml_content = xml_content.replace('&', '&amp;').replace('&amp;amp;', '&amp;')
with open('fixed_input.xml', 'w') as f:
    f.write(xml_content)

处理后的合法XML再交给XSLT转换,此时直接用<xsl:value-of select="."/>就能得到正确的&符号输出。

3. XSLT内部修正(仅适用于XML合法但内容有误的情况)

如果输入XML是合法的,但内容里错误地多转义了一次(比如实际需要M&E,但XML里写了M&amp;amp;E),可以用XSLT的replace函数修正:

<xsl:value-of select="replace(., '&amp;amp;', '&amp;')"/>

这段代码会把重复转义的&amp;amp;还原为&amp;,最终输出时解析为&符号。

内容的提问来源于stack exchange,提问作者M.Ismail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:43:15