XSLT - 在副本中保留禁用 - 输出 - 转义

时间:2011-07-04 15:23:52

标签: xslt

disable-output-escaping内使用该值时,我似乎遇到了保留xsl:copy-of的问题。

这是我的代码:

<xsl:call-template name="Display">
    <xsl:with-param name="text">
        <xsl:value-of select="content" disable-output-escaping="yes" />
    </xsl:with-param>
</xsl:call-template>

<xsl:template name="Display">
    <xsl:param name="text" />
    <span><xsl:copy-of select="$text" /></span>
</xsl:template>

xsl:value-of语句中保留的任何特殊字符在xsl:copy-of语句中使用时都会被转义。

例如:

<xsl:value-of select="$text" disable-output-escaping="yes">会显示:è

<xsl:copy-of select="$text">将显示&#232

我想知道是否有办法解决这个问题?

2 个答案:

答案 0 :(得分:3)

根据规范,disable-output-escaping属性只能在<xsl:value-of><xsl:text>说明中指定。

您只需要在实际输出值的xslt指令上使用DOE,而不是在设置参数值的指令上。

<强>解决方案

替换:

<span><xsl:copy-of select="$text"/></span>

使用:

<span><xsl:value-of select="$text"  disable-output-escaping="yes"/></span>

请注意:通常应避免使用DOE,因为它会破坏XSLT体系结构模型,通常不需要。此外,DOE功能不是强制性的,并非所有XSLT 1.0处理器都支持它。

注意2 :您根本不需要DOE。浏览器应按预期显示XSLT转换的输出。

答案 1 :(得分:0)

disable-output-escaping在传递文本节点时控制序列化程序的操作。当文本节点没有被传递给序列化程序时,例如当它被添加到临时树时,它没有意义。