使用xslt从xml获取值



我有一个返回xml数据的sql存储过程。我的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值到第一顺序。我尝试了一些代码,但它是不可能得到我的答案。我的代码像

<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, '&#10;')"/>
  </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属性的所有重子<TT>元素。最重要的是,指示处理器以倒序(通过<xsl:sort>指令)将模板应用于这些元素
  • 第二个模板匹配所有<TT>元素(鉴于前一个模板单独存在,这意味着它将匹配所有具有@TXT1属性的<TT>元素)。一旦找到这样一个元素,就打印其@TXT1属性的值,后跟一个换行符。

相关内容

  • 没有找到相关文章

最新更新