如何在XSLT中转义字符

时间:2010-08-05 14:29:52

标签: xml xslt escaping

我有一个将XML转换为PLSQL的XSLT

我需要逃避角色:> (大于)

例如:

P_C710_INT_PROFILE_ID =>

我尝试使用>并将字符放在xsl:text中,没有运气

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:7)

感谢大家,但正确的答案是:

<xsl:text disable-output-escaping="yes">&gt;</xsl:text>

答案 1 :(得分:4)

没有问题。这个样式表(空):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
</xsl:stylesheet>

输入:

<text>P_C710_INT_PROFILE_ID =&gt;</text>

输出:

P_C710_INT_PROFILE_ID =>

编辑:因为您的问题不明确,我正在添加一个解决方案,以防您想在xsl:output / @ method =“text”声明下输出字符实体。

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="text()" name="text">
        <xsl:param name="text" select="."/>
        <xsl:if test="$text != ''">
            <xsl:variable name="first" select="substring($text,1,1)"/>
            <xsl:choose>
                <xsl:when test="$first = '&gt;'">&amp;gt;</xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$first"/>
                </xsl:otherwise>
            </xsl:choose>
            <xsl:call-template name="text">
                <xsl:with-param name="text" select="substring($text,2,(string-length($text)-1) div 2 + 1)"/>
            </xsl:call-template>
            <xsl:call-template name="text">
                <xsl:with-param name="text" select="substring($text,(string-length($text)-1) div 2 + 3)"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出:

P_C710_INT_PROFILE_ID =&gt;

这与Render escaped XML on browser

有关

答案 2 :(得分:1)

我也在努力解决这个问题,即使在更改输出方法并添加了disable-output-escaping属性之后,它仍然无法正常工作。

然后我查看了我的源代码,我意识到我正在使用XmlTextWriter和转换结果,而XmlTextWriter正在应用输出转义。一旦我将其切换为只使用StringWriter,输出就是正确的。