2010-01-19 33 views
3

我想按日期對我的xml排序,但它不工作我的XML和XSL [R這樣問題的<xsl:排序選擇= 「」/>

<xsl:template match="/"> 
    <xsl:for-each select="news/item"> 
         <xsl:sort select="date1" order="descending" />          

          <xsl:value-of select="date1"/>         

        </xsl:for-each> 
</xsl:template> 

MYXML

<news> 
<item> 
<date1>January 1, 2010</date1> 
</item> 
<item> 
    <date1>November 29, 2009</date1> 
</news> 


     Its displaying the result but not in sorted way.. 

回答

4

xsl-sort不知道如何排序日期。它將使用默認值進行文本排序,但您可以使用data-type屬性指定數字排序。

有幾種方法可以解決這個問題 - add an attribute或更改將日期輸出到源XML的方式,因此您必須通過數字方式對錶示進行排序。

+1

Link是馬麗娟它解決了我的問題.....感謝... – 2010-01-19 15:58:31

4

你可以嘗試使用這樣的:

<xsl:template match="/"> 
    <xsl:for-each select="news/item"> 
    <xsl:sort select="xs:date(date1)" order="descending" /> 
    <xsl:value-of select="date1"/>         
    </xsl:for-each> 
</xsl:template> 

儘管如此,如果你有控制XML生成,我也要把這樣的:

<date1 isoValue="20100101">January 1, 2010</date1> 

然後用

<xsl:sort select="xs:date(date1/@isoValue)" order="descending" /> 
3

檢查this issue問題的解決方案。它使用XSLT排序按XML中的日期對XML進行排序。

+0

@AdityaBajaj:從您的編輯評論,似乎在哪裏有兩個帳戶。你應該讓它們合併成一個:http://stackoverflow.com/help/merging-accounts – oberlies 2013-07-16 12:57:07

+0

完成。謝謝! – 2013-07-17 09:16:52

0

,如果你有在XML生成量控制:

輸入:

<date1> 2010-10-17+02:00 </date1> 

變換:

<date1 number="{translate(substring-before(date1,'+'),'-','')}" 
    <xsl:value-of select="date1"/> 
</date1>` 

輸出:

<date1 number="20101017">2010-10-17+02:00</date1> 

比你可以像使用通常是

<xsl:sort order="descending" select="@number" data-type="number"/> 

格爾茨

1

日期在XML是一個字符串。除非日期總是如下所示:yyyy-mm-dd您確實無法按正確的順序排序。

因此,這是正確的做法:

<xsl:sort select="newsDate" order="ascending" /> 

它將作品就像一個魅力。

0

您可以使用美國日期格式對date1字段進行排序,以創建年/月/日字符串,然後對降序進行排序。在的xsl:for-每個標籤,你想補充一點:

<xsl:sort select="ddwrt:FormatDateTime(string(@date1),1033,'yy/MM/dd')" order="descending" />