"select distinct" dynamique
M'sieurs dames, bonjour
Je vous explique mon souci.
J'ai une source de données de ce genre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?>
<racine>
<ligne>
<item1>gronk</item1>
</ligne>
<ligne>
<item1>gronk</item1>
</ligne>
<ligne>
<item2>gronk</item2>
</ligne>
<ligne>
<item2>gronk</item2>
</ligne>
<ligne>
<item1>greuh</item1>
</ligne>
<param>
<valeur>item1</valeur>
</param>
<param>
<valeur>item2</valeur>
</param>
</racine> |
('tention, la suite est velue)
et mon but est de trouver, pour chaque paramètre (nœud "param") le nombre de nœuds parmi les nœuds "ligne" qui ont un enfant s'appelant comme le paramètre sans compter les doublons.
Un bon exemple, parce que sinon, c'est pas évident.
Ici, pour le premier paramètre (item1), il y a 3 nœuds "ligne" qui ont un fils avec ce nom, mais seulement 2 qui ont des valeurs différentes (gronk et greuh).
Pour le second paramètre (item2), il y a 2 nœuds "ligne" qui ont un fils avec ce nom, mais seulement 1 qui a une valeur différente (gronk)
La "fonction" renvoie donc :
item1 > 2
item2 > 1
Mes premiers pas :
Me renvoie les noeuds ayant un fils avec le nom du paramètre :
Code:
1 2 3 4 5
|
<xsl:template match="racine">
<xsl:variable name="parametre" select="param/valeur"/>
<xsl:copy-of select="/racine/ligne/*[name() =$parametre]"></xsl:copy-of>
</xsl:template> |
Un test de filtre pour éliminer les doublons (marche pas)
(en dur, pas en dynamique)
Code:
1 2 3 4
| <xsl:template match="racine">
<xsl:variable name="parametre" select="param/valeur"/>
<xsl:copy-of select="/racine/ligne/*[name() =$parametre][not(preceding-sibling::*='gronk')]"></xsl:copy-of>
</xsl:template> |
Mais là, je tourne en rond, j'arrive à rien...
Est-ce seulement possible ?
Un grand merci pour toute aide possible (si je n'ai pas été clair, ne pas hésiter à me demander des éclaircissements)