XSLT转换错误地替换了字符

时间:2011-03-04 18:16:42

标签: xslt

我有以下 XSLT 代码:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="POL">
    <sql:SQLXML>
        <sql:Execute as="Test" into="Test">
            <sql:SQL>
                select trans_type, trans_datetime, replace(convert(varchar, trans_datetime, 114), ':', '_') as trans_time, application_data from Acord_Transaction where transaction_id=
                <xsl:value-of select="TRANSACTIONID" />
            </sql:SQL>
        </sql:Execute>
        <xsl:if test="string-length(APPLICATIONDATA/parameters/noteid) &gt; 0">
            <sql:Execute as="newnote" into="newnotes">
                <sql:SQL>
                    select * from notes where note_id=
                    <xsl:value-of select="APPLICATIONDATA/parameters/noteid" />
                    AND added_date='
                    <xsl:value-of select="APPLICATIONDATA/parameters/addeddate" />
                    '
                </sql:SQL>
            </sql:Execute>
        </xsl:if>
</xsl:template>

问题:

APPLICATIONDATA是一个字符串字段,它从数据库初始化并包含XML代码。 sql:execute完成后,输出<>将替换为&lt&gt

我需要一个将在sql:execute之后应用的模板,以便执行的结果变为有效的 XML代码。然后我可以从xsl:if上运行XPath。

3 个答案:

答案 0 :(得分:0)

不幸的是,在直接XSLT中没有可靠或内置的方法。如果可能,您不应将XML数据存储在数据库中,并以这种方式转义标记。请参阅:XSL character escape problem

答案 1 :(得分:0)

就像詹姆斯所说,在XSLT的范围内没有办法做到这一点。但是,根据您的解析引擎,有特定于特定风格的方法来实现此目的。有关一些想法,请参阅此帖子:XSLT; parse escaped text to a node-set and extract subelements

答案 2 :(得分:0)

XSLT在树结构(XML)上运行,这是二维的。)

您在数据库中拥有的是严重破坏的标记,已被展平为一维字符串。

必须撤消此野蛮行为取消转义转义后的字符,然后可以像往常一样使用XSLT处理恢复的XML。

unescaping本身可以使用XSLT 2.0完成,但绝对没有紧迫的理由为什么应该使用XSLT。