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>
问题原因分析
- 第二段代码替换失效:你用
öäü作为translate的匹配字符,这些实体在XSLT解析时会转为对应字符,但如果源XML中的变音符号是原生ö/ä/ü字符(而非实体),两者在字符层面不匹配,导致替换失败。 - 第三段代码编译错误:直接写
öäü报错,是因为XSLT文件的编码声明与实际保存编码不一致。比如文件存为UTF-8但XML声明写encoding="ISO-8859-1",处理器解析字符时会出现乱码或语法错误。
关键注意事项
- 编码一致性:务必将XSLT文件以UTF-8编码保存,同时在XML声明中明确
encoding="UTF-8",避免字符解析错误。 disable-output-escaping支持:该属性能让&符号以原始形式输出而非&,大多数主流XSLT处理器(如Xalan、libxslt)均支持此属性。- 测试验证:输入
Test & Welcöme,处理后会输出Test & Welcome!~,完全符合预期效果。
内容的提问来源于stack exchange,提问作者flea02
相关产品推荐
相关产品推荐

