Sql 使用xslt从xml获取值
我有一个返回xml数据的sql存储过程Sql 使用xslt从xml获取值,sql,xml,xslt,xslt-1.0,Sql,Xml,Xslt,Xslt 1.0,我有一个返回xml数据的sql存储过程 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"/> <
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值到第一个顺序。我尝试了一些代码,但无法得到答案。我的代码类似于
<xsl:variable name="cate" select="shop:ExecStoredProcedure('kt_cate',concat('@Dcat:',$default))">
<xsl:variable name="txt1-atts" select="$cate//TT/@TXT1"/>
有人能帮我得到答案吗?现在还不太清楚你想达到什么目的——也就是说,如果我们接受你上面的评论: 是的,我需要从最后一个到第一个选择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>
<root>
<item>
<XML_F52E2B61-18A1-11d1-B105-00805F49916B>
<TT TXT1="Mouse"/>
<TT TXT1="Computer"/>
</XML_F52E2B61-18A1-11d1-B105-00805F49916B>
</item>
</root>
Computer
Mouse
说明:
<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>
<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由两个模板组成:
- 第一个模板匹配文档中的第一个元素,找到它后,指示XSLT处理程序将模板应用于所有具有
属性的曾孙元素。最重要的是,处理器被指示以相反的顺序将模板应用于这些元素(通过@TXT1
指令) - 第二个模板匹配所有
元素(鉴于前一个模板的单独存在,这意味着它将匹配所有具有
属性的@TXT1
元素)。找到一个这样的元素后,将打印其
属性的值,后跟一个换行符@TXT1