2009-11-23 62 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)"/>