2009-11-23 66 views
0

我有一堆數據,看起來有點像這樣:如何在XSLT中按日期範圍對項目進行分組?

<item> 
    <colour>Red</colour> 
    <date_created>2009-10-10 12:01:55</date_created> 
    <date_sold>2009-10-20 22:32:12</date_sold> 
</item> 
<item> 
    <colour>Blue</colour> 
    <date_created>2009-11-01 13:21:00</date_created> 
    <date_sold>2009-11-21 12:32:12</date_sold> 
</item> 
<item> 
    <colour>Blue</colour> 
    <date_created>2009-10-29 21:23:02</date_created> 
    <date_sold>2009-10-20 02:02:22</date_sold> 
</item> 
<item> 
    <colour>Red</colour> 
    <date_created>2009-11-02 09:11:51</date_created> 
    <date_sold>2009-11-20 09:15:53</date_sold> 
</item> 
<item> 
    <colour>Red</colour> 
    <date_created>2009-10-18 11:00:55</date_created> 
    <date_sold>2009-10-20 11:12:22</date_sold> 
</item> 

現在我想什麼,能夠做的是運行通過XSLT樣式表這樣,我得到的輸出中看起來像這樣:

Colour | In stock 1 week | In stock 2 weeks | In stock 3 weeks 
Red |  1   |  3   |  2 
Blue |  0   |  2   |  1 

目前我有一個使用基本muenchian分組的表明股票30%的紅色和70%的藍色樣式表,但我看不到的方式來找到withing在指定日期範圍的節點數量。

有沒有辦法使用鍵來選擇一個範圍?我是否需要創建某種中間數據節點?有沒有不同的路線顯示我用這兩種建議咆哮錯誤的樹?這甚至可以使用XSLT,還是需要找到一種方法來更改數據源?

+0

你需要某種形式的這種DATEDIFF功能。 XSLT 1.0沒有內置任何內容,但如果您的處理器支持EXSLT,則可以提供解決方案。 – Tomalak 2009-11-23 14:13:33

+0

我實際上在Sharepoint工作,我不確定這裏有什麼XSLT版本,但我認爲它是XSLT 2.0,可能包含一些自定義Sharepoint擴展。我正在使用的數據比我的示例稍微複雜一些,但解決方案可以解決我的問題。 – glenatron 2009-11-23 15:13:15

+0

我糾正,它只有1.0,所以我沒有任何內置的日期。多麼不方便。我想我需要看看我能否找到解決方法。 – glenatron 2009-11-23 15:15:26

回答

1

如果你可以使用EXSLT date and time functions,你可以使用類似下面讓庫存時間的項目(以周,四捨五入):

<xsl:key 
    name="items-by-weeks-in-stock" 
    match="//item" 
    use="ceiling(date:seconds(date:difference(translate(date_created, ' ', 'T'), 
              translate(date_sold, ' ', 'T'))) 
       div 604800)"/>