2011-02-18 67 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>