我有以下xsl文档:http://jsfiddle.net/Abadi/92ndrnut/2/。 我需要添加:disable-output-escaping =" yes"。 因为它适用于:
<CARRIERNAME>
<![CDATA[AT&T]]>
</CARRIERNAME>.
正在制作:AT&T
。
应用的模板是:
<xsl:value-of select="CARRIERNAME" />
。
当我将其更新为:
<xsl:value-of select="CARRIERNAME" disable-output-escaping="yes" />
,
它起作用了,输出是:AT&T
。
我的问题是如何添加disable-output-escaping =&#34; yes&#34;到xsl文档,以便它将应用于所有模板。
更改应在链接中提供的xsl documnet中进行。 或者,如果可能有不同的方法。 我是xslt的新手,非常感谢你的帮助。
答案 0 :(得分:1)
我的问题是如何添加disable-output-escaping =&#34; yes&#34;到xsl文档,以便它将应用于所有模板。
这是XSLT 2.0的一项功能,其中disable-output-escaping
被视为已弃用并由xsl:character-maps
取代。这些字符映射可以应用于整个输出。
请注意,<![CDATA[AT&T]]>
与AT&T
相同。任何具有AT&T
的XML都将作为AT&T
显示在客户端中,因为它只是一种转义&
的方法。强制&
不被转义会导致生成的XML无效的XML。如果HTML是你的输出,那么在某些情况下需要这种转义(即在script
元素中)。
您可以在XSLT 1.0中使用的解决方法如下。假设您的入口点是从根节点开始的地方:
<xsl:template match="/">
<!-- your code here -->
</xsl:template>
将其替换为:
<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的可用性,但几乎每个XSLT 1.0处理器都支持它。
对链接中提供的代码进行了一些评论:
<xsl:if test="following-sibling::*"> <xsl:text></xsl:text> </xsl:if>
这没有效果。
<xsl:sort> <xsl:attribute name="select"><xsl:value-of select="meta_data//bindto"/></xsl:attribute> <xsl:attribute name="data-type"><xsl:value-of select="meta_data//sortby_type"/></xsl:attribute> <xsl:attribute name="order"><xsl:value-of select="meta_data//direction"/></xsl:attribute> </xsl:sort>
这没有任何效果(排序属性没有意义,因为属性总是以处理器首选的任何顺序输出。)
<xsl:text><xsl:value-of select="display_precision"/></xsl:text>
这是非法的,如果你仍然有这个,你将无法运行你的样式表。
答案 1 :(得分:0)
不清楚为什么要禁用输出转义。如果要生成XML或HTML,则需要对&符号进行转义,以使XML或HTML有效。如果要生成其他内容(文本),则应使用文本输出方法而不是XML或HTML输出方法。也许你需要的只是<xsl:output method="text"/>
如果初学者使用disable-output-escaping
,90%的时间是因为他们没有找到正确的方法来达到他们想要的效果。不幸的是,虽然你还没有真正解释你想要实现的目标(例如,转换的输出是什么?)。