首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向我的xsl文档添加disable-output-escaping="yes“?

如何向我的xsl文档添加disable-output-escaping="yes“?
EN

Stack Overflow用户
提问于 2015-09-02 13:57:49
回答 2查看 3K关注 0票数 1

我有以下xsl文档:http://jsfiddle.net/Abadi/92ndrnut/2/。我需要添加:停用-输出-转义=“yes”。因为当它被应用于:

代码语言:javascript
复制
<CARRIERNAME>
    <![CDATA[AT&T]]>
</CARRIERNAME>.

它正在产生:AT&amp;T

应用的模板为:

<xsl:value-of select="CARRIERNAME" />

当我将其更新为:

<xsl:value-of select="CARRIERNAME" disable-output-escaping="yes" />

它起作用了,输出是:AT&T

我的问题是如何向xsl文档添加disable-output-escaping="yes“,这样它就可以应用于所有模板。

更改应该发生在链接中提供的xsl文档中。或者是否有不同的方法。我是xslt新手,非常感谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-09-02 15:29:57

我的问题是如何将disable-output-

=“yes”添加到xsl文档中,以便它可以应用于所有模板。

这是XSLT2.0的一个特性,在XSLT2.0中,disable-output-escaping被认为是不推荐使用的,并被xsl:character-maps取代。这些字符映射可以应用于整个输出。

请注意,<![CDATA[AT&T]]>AT&amp;T相同。任何具有AT&amp;T的XML都将在客户机中显示为AT&T,因为这仅仅是转义&的一种方式。强制不对&进行转义会使生成的XML无效。如果超文本标记语言是你的输出,那么在某些情况下,这种转义是必需的(即在script元素中)。

可以在XSLT 1.0中使用的解决方法如下所示。假设您的入口点是从根节点开始的位置:

代码语言:javascript
复制
<xsl:template match="/">
    <!-- your code here -->
</xsl:template>

将其替换为:

代码语言:javascript
复制
<xsl:template match="/">
    <xsl:variable name="pre-process">
        <!-- your code here -->
    <xsl:variable>
    <xsl:apply-templates select="exslt:node-set($pre-process)" mode="escape"/>
</xsl:template>

<xsl:template match="@* | *" mode="escape">
    <xsl:copy>
        <xsl:apply-templates select="node()" mode="escape"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="text()" mode="escape">
    <xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>

上面的代码只是简单地重新处理所有内容,并具体处理要转义的文本节点(转义时唯一重要的节点)。代码取决于扩展函数exslt:node-set的可用性,但几乎每个XSLT1.0处理程序都支持它。

以下是对链接中提供的代码的一些注释:

这没有任何效果。

排序类型“

”>

这没有任何效果(对属性进行排序是没有意义的,因为属性总是以处理器喜欢的任何顺序输出)。

这是非法的,如果你仍然拥有它,你将不能运行你的样式表。

票数 1
EN

Stack Overflow用户

发布于 2015-09-02 16:40:11

不清楚为什么要禁用输出转义。如果生成的是XML或HTML,则需要对与号进行转义才能使XML或HTML有效。如果要生成其他内容(文本),则应使用文本输出方法,而不是XML或HTML输出方法。也许你所需要的就是<xsl:output method="text"/>

如果初学者在90%的时间里使用disable-output-escaping,那是因为他们没有找到正确的方法来达到他们想要的效果。不幸的是,您并没有真正解释您试图实现的目标(例如,您的转换的输出是什么?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32345602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档