Bonjour,
Je suis nouveau dans le monde merveilleux du XSLT. Pour remettre dans le contexte, je fais un front-end pour une base Domino (Lotus Notes) en utilisant leur système de génération de XML (?ReadViewEntries pour ceux qui connaissent). Le problème est que la structure obtenue représente une succession de lignes (les <viewentry> ) avec des colonnes qu'elles ont toutes en commun (<entrydata> ), mais que je veux les grouper par la valeur de l'une de ces colonnes (en l'occurence la première, "auteur" ).
Fichier exemple :
<viewentries>
<viewentry>
<entrydata columnnumber="0" name="auteur">
<text>NomDuPremierAuteur</text>
</entrydata>
<entrydata columnnumber="1" name="projet">
<text>NomDuProjet</text>
</entrydata>
<entrydata columnnumber="2" name="nombre1">
<text>12</text>
</entrydata>
<entrydata columnnumber="3" name="nombre2">
<text>0</text>
</entrydata>
... (il y a une dizaine d'autres valeurs numeriques similaires)
</viewentry>
<viewentry>
<entrydata columnnumber="0" name="auteur">
<text>NomDuPremierAuteur</text>
</entrydata>
<entrydata columnnumber="1" name="projet">
<text>NomDunAutreProjet</text>
</entrydata>
...
</viewentry>
<viewentry>
<entrydata columnnumber="0" name="auteur">
<text>NomDuSecondAuteur</text>
</entrydata>
<entrydata columnnumber="1" name="projet">
<text>NomDEncoreUnAutreProjet</text>
</entrydata>
... </viewentry>
...
</viewentries> |
La structure est un peu étrange (mais on peut pas avoir mieux en sortie de Lotus Notes hélas)
Les projets forment les "lignes", les enregistrements sont groupés par auteur.
Maintenant mes questions :
1. Est-il possible, en XSL, d'aboutir à une structure XML où les <viewentry> seraient regroupés par auteur avec des balises <auteur nom=""> insérées entre <viewentries> et les <viewentry>, pour ensuite transformer facilement cette structure intermédiaire en HTML ?
2. Si la réponse à la question 1. est non, sachant que les <viewentry> sont triés par l'auteur (contenu dans le <text> contenu dans <entrydata columnnumber="0"> ) et que ce fichier XML est transformé en un tableau html montrant les valeurs numériques de chaque projet (les viewentry aux numéros de colonne >= 2), est-il possible d'afficher un tableau par auteur, pour mettre son nom en en-tête plutôt que dans chaque ligne ?
3. S'il y a une solution à la question 2, est-ce qu'il est possible, pour chaque tableau d'auteur, de rajouter une dernière ligne "total" faisant la somme des valeurs numériques des différents projets ?
Ce que je veux obtenir, c'est ça :
--- NomDuPremierAuteur ---
Projet |donnee1|donnee2|....
NomDuProjet | 12| 0|....
NomDunAutreProjet| 15| 5|....
Total | 27| 5|....
--- NomDuSecondAuteur ---
Projet |donnee1|donnee2|....
NomDEncoreUnAutreProjet| 3| 10|....
Total | 3| 10|....
.......
|
Tout ça se ferait facilement avec un langage de script ou alors avec un fichier XML mieux structuré, mais j'ai que le XSL, qui m'a l'air suffisamment puissant pour faire ça.
J'ai tenté différentes choses :
<xsl:template match="viewentries">
<xsl:for-each select="viewentry/entrydata[@columnnumber='0']/text"> |
Le problème est qu'il me sélectionnait le même nom plusieurs fois, ce qui est logique.
J'ai essayé de mettre le nom de l'auteur dans une variable pour ensuite dé. Les "variables" d'XSL ont l'air d'être des constantes et les param ont l'air d'être le seul moyen de pouvoir stocker des valeurs... à condition d'appeler un template, ce qui oblige la récursivité, que je ne peux pas utiliser à cause de la génération de HTML dans ma template.
Enfin bref.
Des experts du XSL par ici ?
Merci beaucoup
Message édité par Lhalfelin le 18-07-2008 à 15:12:58