You need to enable JavaScript to run this app. XSLT无法识别
回车字符 替换特殊字符时报样式表编译错误
优惠活动
大模型
产品
解决方案
定价
更多

XSLT无法识别
回车字符 替换特殊字符时报样式表编译错误

XSLT替换
相关编译/匹配错误的修正方案

错误根源

问题本质是混淆了XSLT文档本身的XML实体解析规则和XPath表达式的字符串值:写在XSLT文件内的所有XML实体,都会在样式表被解析加载的阶段提前转换为对应字符,不会作为字面文本传递给后续的XPath逻辑。
你之前尝试的几种写法的失效原因:

  • 写select="'
'":该值会被XML解析器直接转为真实的回车控制字符(ASCII 13),如果需求是匹配字面打印的
文本串,这种写法完全匹配不到目标内容
  • 写select="'&#xD'":缺少XML实体必须的分号,属于非法的XML语法结构,直接触发样式表编译错误
  • 写select="'&#xD'":虽然&的转义逻辑正确,但漏掉了实体末尾的分号,最终生成的匹配字符串是&#xD,和实际目标文本
存在字符差,无法匹配生效

分场景的正确写法

根据实际要匹配的目标内容,二选一使用对应配置:

  1. 场景1:替换节点值中真实存在的回车控制字符(也就是XML规范中
实体对应的ASCII 13控制符,通常是源文件中换行、回车格式不规范产生的隐藏字符)
    修正后的代码片段:
    <xsl:variable name="value1">
        <xsl:call-template name="replaceCharacters">
            <xsl:with-param name="stringIn" select="$value"/>
            <xsl:with-param name="charsIn" select="'&#xD;'"/> 
            <xsl:with-param name="charsOut" select="''"/>
        </xsl:call-template>
    </xsl:variable>
    
    这种写法下,XML解析器会自动将&#xD;转换为对应回车字符,传入替换模板的参数就是匹配回车的目标值。
  2. 场景2:替换源XML中以字面文本形式存在的&#xD;字符串(也就是源文件中直接写了"&"、"#"、"x"、"D"、";"拼接的可见文本,没有被XML解析为真实回车的内容)
    修正后的代码片段:
    <xsl:variable name="value1">
        <xsl:call-template name="replaceCharacters">
            <xsl:with-param name="stringIn" select="$value"/>
            <xsl:with-param name="charsIn" select="'&amp;#xD;'"/> 
            <xsl:with-param name="charsOut" select="''"/>
        </xsl:call-template>
    </xsl:variable>
    
    这种写法通过&amp;转义开头的&符号,确保XPath最终拿到的匹配字符串就是完整的字面文本&#xD;,同时补上了之前漏掉的末尾分号,不会触发XML语法编译错误。

注意事项

XSLT的实体解析发生在样式表加载的最前端,如果需要匹配的是某个特殊转义序列的字面文本,必须对序列中的&符号做&amp;双重转义,同时补齐实体本身的语法结构(带末尾分号),否则要么触发编译错误,要么匹配到错误的字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 04:36:04