如何在XSLT中按日期范围对项目进行分组?

时间:2009-11-23 13:18:57

标签: xml xslt date grouping range

我有一堆看起来有点像这样的数据:

<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%蓝色,但我找不到找到具有给定日期范围的节点数量的方法。

有没有办法使用键来选择范围?我是否需要创建某种中间数据节点?是否有不同的路线显示我正在用这两个建议咆哮错误的树?这是否可以使用XSLT,或者我是否需要找到更改数据源的方法?

1 个答案:

答案 0 :(得分: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)"/>