2009-11-23 9 views
0

J'ai un tas de données qui ressemble un peu à ceci:Comment regrouper des éléments par plage de dates dans 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> 

Maintenant, ce que je voudrais être en mesure de le faire est de courir que par une feuille de style XSLT tel que je reçois ouput ressembler à ceci:

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

Actuellement, j'ai une feuille de style qui utilise un regroupement de muenchian de base pour montrer que 30% des actions était rouge et 70% de bleu, mais je ne vois pas un moyen de trouver le nombre de nœuds withing une période donnée.

Existe-t-il un moyen d'utiliser les touches pour sélectionner une plage? Ai-je besoin de créer une sorte de noeud de données intermédiaire? Y a-t-il un chemin différent qui montre que j'abuse du mauvais arbre avec ces deux suggestions? Est-ce possible avec XSLT ou dois-je trouver un moyen de changer la source de données?

+0

Vous avez besoin d'une sorte de datediff fonctionnalité pour cela. Rien n'est construit dans XSLT 1.0, mais si votre processeur supporte EXSLT, une solution est possible. – Tomalak

+0

Je travaille actuellement sur Sharepoint, je ne suis pas sûr de la version XSLT, mais je pense que c'est XSLT 2.0 avec éventuellement des extensions Sharepointy personnalisées. Les données avec lesquelles je travaille sont un peu plus complexes que mon exemple ici, mais une solution à ce problème résoudrait mon problème. – glenatron

+0

Je me suis corrigé, c'est seulement 1.0 donc je n'ai pas construit en datediff. Quel inconvénient. Je suppose que je vais devoir voir si je peux trouver une solution de contournement. – glenatron

Répondre

1

Si vous pouvez utiliser EXSLT date and time functions, vous pouvez utiliser quelque chose comme ce qui suit pour obtenir des articles en temps en stock (en semaines, arrondi):

<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)"/> 
Questions connexes