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

XSLT 1.0特殊字符转换问题:变音符号替换与&正确显示

解决XSLT 1.0处理变音符号与&符号的显示问题

核心解决方案

直接使用原生变音符号字符结合translate函数完成替换,同时保留disable-output-escaping="yes"处理&符号,关键是确保XSLT文件的编码声明与实际保存编码一致。

可行代码示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/*">
    <xsl:choose>
      <xsl:when test="normalize-space(ROF_NAME) != ''">
        <!-- 先替换ö/ä/ü为o/a/u,再截取前149字符,禁用转义保留& -->
        <xsl:value-of select="substring(translate(ROF_NAME, 'öäü', 'oau'), 1, 149)" disable-output-escaping="yes"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text> </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text>!~</xsl:text>
  </xsl:template>
</xsl:stylesheet>

问题原因分析

  1. 第二段代码替换失效:你用&#246;&#228;&#252;作为translate的匹配字符,这些实体在XSLT解析时会转为对应字符,但如果源XML中的变音符号是原生ö/ä/ü字符(而非实体),两者在字符层面不匹配,导致替换失败。
  2. 第三段代码编译错误:直接写öäü报错,是因为XSLT文件的编码声明与实际保存编码不一致。比如文件存为UTF-8但XML声明写encoding="ISO-8859-1",处理器解析字符时会出现乱码或语法错误。

关键注意事项

  • 编码一致性:务必将XSLT文件以UTF-8编码保存,同时在XML声明中明确encoding="UTF-8",避免字符解析错误。
  • disable-output-escaping支持:该属性能让&符号以原始形式输出而非&amp;,大多数主流XSLT处理器(如Xalan、libxslt)均支持此属性。
  • 测试验证:输入Test & Welcöme,处理后会输出Test & Welcome!~,完全符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:23:22