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

如何在XSLT 2.0中将HTML特殊转义字符转换为实际字符?

XSLT 2.0 批量转换HTML特殊转义字符为实际字符

问题场景

输入文本包含多层或大量HTML特殊转义字符(如ü、À),需要转换为对应实际Unicode字符,示例如下:

输入:

<Data>Lenevo100 f&amp;amp;uuml;r Laser</Data>
<Data>DELL &amp;Agrave;llow Drucker</Data>

预期输出:

<DataOutput>Lenevo100 fÜr Laser</DataOutput>
<DataOutput>DELL Àllow Drucker</DataOutput>

可行解决方案

方法1:预定义实体映射 + xsl:analyze-string正则替换

先定义包含目标HTML实体与对应字符的映射表,再通过正则匹配所有&[a-zA-Z0-9]+;格式的转义串,逐一替换:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- 定义HTML实体映射,可按需扩展 -->
    <xsl:variable name="html-entities" as="element()*">
        <entity name="amp" char="&amp;"/>
        <entity name="uuml" char="Ü"/>
        <entity name="Agrave" char="À"/>
    </xsl:variable>

    <xsl:template match="Data">
        <DataOutput>
            <xsl:analyze-string select="." regex="&amp;([a-zA-Z0-9]+);">
                <xsl:matching-substring>
                    <xsl:value-of select="$html-entities[@name=regex-group(1)]/@char"/>
                </xsl:matching-substring>
                <xsl:non-matching-substring>
                    <xsl:value-of select="."/>
                </xsl:non-matching-substring>
            </xsl:analyze-string>
        </DataOutput>
    </xsl:template>
</xsl:stylesheet>

这种方法可控性强,适合需要自定义处理范围的场景,但需手动维护实体映射表。

方法2:利用XML解析自动处理转义

将待处理文本包装成合法XML片段,借助XML解析器自动解析实体转义:

  1. 把文本拼接成完整XML元素字符串
  2. 用parse-xml()函数解析该字符串
  3. 提取解析后的文本内容
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:template match="Data">
        <DataOutput>
            <xsl:variable name="xml-fragment" as="xs:string" select="concat('&lt;temp&gt;', ., '&lt;/temp&gt;')"/>
            <xsl:value-of select="parse-xml($xml-fragment)/temp/text()"/>
        </DataOutput>
    </xsl:template>
</xsl:stylesheet>

这种方法无需手动维护实体,XML解析器会自动处理所有标准HTML实体(包括嵌套转义),是最省心的方案,前提是待处理文本不包含破坏XML结构的字符(如未转义的</>)。

方法3:使用扩展函数(依赖处理器支持)

如果使用支持扩展的XSLT处理器(如Saxon),可直接调用第三方库的HTML转义处理函数,比如Java的org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:escape="java:org.apache.commons.lang3.StringEscapeUtils">
    <xsl:template match="Data">
        <DataOutput>
            <xsl:value-of select="escape:unescapeHtml4(.)"/>
        </DataOutput>
    </xsl:template>
</xsl:stylesheet>

这种方法覆盖所有HTML实体,无需手动配置,但需确保处理器支持扩展并引入对应依赖库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:23:08