我有一个sql存储过程,它返回xml数据。我的SP的select命令是
SELECT TXT1
FROM @tmp1 CT
LEFT JOIN ETEXT TT ON CT.Cate = TT.REFKEY FOR XML AUTO
它返回xml,如
<root>
<item>
<XML_F52E2B61-18A1-11d1-B105-00805F49916B>
<TT TXT1="Mouse"/>
<TT TXT1="Computer"/>
</XML_F52E2B61-18A1-11d1-B105-00805F49916B>
</item>
</root>
我需要使用xslt设置此xml的样式并打印TXT1值,从最后的TXT1值到First order。我尝试了一些代码,但是无法得到我的答案。我的代码如
<xsl:variable name="cate" select="shop:ExecStoredProcedure('kt_cate',concat('@Dcat:',$default))">
<xsl:variable name="txt1-atts" select="$cate//TT/@TXT1"/>
有人帮忙得到答案吗?
答案 0 :(得分:2)
目前还不是特别清楚你想要完成什么 - 如果我们在上面发表你的评论那么说:
是的我需要从xml中选择从最后到第一个的所有TXT1值 表示最后一个值计算机首先打印和下一个鼠标打印
...然后这个XSLT 1.0解决方案实现了你想要的目标。
当这个XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes" method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:apply-templates select="*/*/TT[@TXT1]">
<xsl:sort select="position()" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="TT">
<xsl:value-of select="concat(@TXT1, ' ')"/>
</xsl:template>
</xsl:stylesheet>
...适用于提供的XML:
<root>
<item>
<XML_F52E2B61-18A1-11d1-B105-00805F49916B>
<TT TXT1="Mouse"/>
<TT TXT1="Computer"/>
</XML_F52E2B61-18A1-11d1-B105-00805F49916B>
</item>
</root>
...生成了想要的结果:
Computer
Mouse
<强>解释强>
XSLT由两个模板组成:
<TT>
属性的所有曾孙@TXT1
个元素。最重要的是,系统会指示处理器以相反的顺序将这些元素应用于(通过<xsl:sort>
指令)。<TT>
元素(鉴于前一个模板的单独存在,这意味着它将匹配具有<TT>
属性的所有@TXT1
元素。找到一个这样的元素后,将打印其@TXT1
属性的值,后跟换行符。