我有以下 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) > 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
完成后,输出<
和>
将替换为<
和>
。
我需要一个将在sql:execute
之后应用的模板,以便执行的结果变为有效的 XML代码。然后我可以从xsl:if
上运行XPath。
答案 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。