2011-02-18 65 views
1

你好,我有这个XML,我想用“POSTED-DATE”对所有的消息/数据/事务/事务与XSLT进行排序,并返回排序后的XML。用XSLT对XML进行排序并返回XML

我有几个小时阅读XSL并试图做到这一点,但它不工作。

在此先感谢

<DATA RESULT="TRUE"> 
     <ACCOUNT NUMBER="MyNumber" CURRENCY="MyCurrency" TYPE="MyType" /> 
     <TRANSACTIONS> 
      <TRANSACTION DESCRIPTION="DESC 1" CURRENCY="USD" POSTED-DATE="2010/01/31" AMOUNT="240.88" /> 
      <TRANSACTION DESCRIPTION="DESC 3" CURRENCY="USD" POSTED-DATE="2010/05/20" AMOUNT="240.88" /> 
      <TRANSACTION DESCRIPTION="DESC 8" CURRENCY="USD" POSTED-DATE="2008/12/31" AMOUNT="240.88" /> 
      <TRANSACTION DESCRIPTION="DESC 3" CURRENCY="USD" POSTED-DATE="2003/12/31" AMOUNT="240.88" /> 
      <TRANSACTION DESCRIPTION="DESC 99" CURRENCY="USD" POSTED-DATE="2011/01/01" AMOUNT="240.88" /> 
      <TRANSACTION DESCRIPTION="DESC 999" CURRENCY="USD" POSTED-DATE="2011/01/06" AMOUNT="240.88" /> 
     </TRANSACTIONS> 
    </DATA> 

在此先感谢

+0

问得好,+1。查看我的答案,获得完整,简短和简单的解决方案。 :) – 2011-02-18 05:13:41

回答

2

这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="TRANSACTIONS"> 
    <TRANSACTIONS> 
    <xsl:apply-templates> 
    <xsl:sort select="@POSTED-DATE"/> 
    </xsl:apply-templates> 
    </TRANSACTIONS> 
</xsl:template> 
</xsl:stylesheet> 

时所提供的XML文档应用:

<DATA RESULT="TRUE"> 
    <ACCOUNT NUMBER="MyNumber" CURRENCY="MyCurrency" TYPE="MyType" /> 
    <TRANSACTIONS> 
     <TRANSACTION DESCRIPTION="DESC 1" 
     CURRENCY="USD" 
     POSTED-DATE="2010/01/31" AMOUNT="240.88" /> 
     <TRANSACTION DESCRIPTION="DESC 3" 
     CURRENCY="USD" 
     POSTED-DATE="2010/05/20" AMOUNT="240.88" /> 
     <TRANSACTION DESCRIPTION="DESC 8" 
     CURRENCY="USD" 
     POSTED-DATE="2008/12/31" AMOUNT="240.88" /> 
     <TRANSACTION DESCRIPTION="DESC 3" 
     CURRENCY="USD" 
     POSTED-DATE="2003/12/31" AMOUNT="240.88" /> 
     <TRANSACTION DESCRIPTION="DESC 99" 
     CURRENCY="USD" 
     POSTED-DATE="2011/01/01" AMOUNT="240.88" /> 
     <TRANSACTION DESCRIPTION="DESC 999" 
     CURRENCY="USD" 
     POSTED-DATE="2011/01/06" AMOUNT="240.88" /> 
    </TRANSACTIONS> 
</DATA> 

产生想要的,正确的结果

<DATA RESULT="TRUE"> 
    <ACCOUNT NUMBER="MyNumber" CURRENCY="MyCurrency" TYPE="MyType"/> 
    <TRANSACTIONS> 
     <TRANSACTION DESCRIPTION="DESC 3" 
     CURRENCY="USD" 
     POSTED-DATE="2003/12/31" AMOUNT="240.88"/> 
     <TRANSACTION DESCRIPTION="DESC 8" 
     CURRENCY="USD" 
     POSTED-DATE="2008/12/31" AMOUNT="240.88"/> 
     <TRANSACTION DESCRIPTION="DESC 1" 
     CURRENCY="USD" 
     POSTED-DATE="2010/01/31" AMOUNT="240.88"/> 
     <TRANSACTION DESCRIPTION="DESC 3" 
     CURRENCY="USD" 
     POSTED-DATE="2010/05/20" AMOUNT="240.88"/> 
     <TRANSACTION DESCRIPTION="DESC 99" 
     CURRENCY="USD" 
     POSTED-DATE="2011/01/01" AMOUNT="240.88"/> 
     <TRANSACTION DESCRIPTION="DESC 999" 
     CURRENCY="USD" 
     POSTED-DATE="2011/01/06" AMOUNT="240.88"/> 
    </TRANSACTIONS> 
</DATA>