M'sieurs dames, bonjour
Je vous explique mon souci.
J'ai une source de données de ce genre :
('tention, la suite est velue)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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 :
Un test de filtre pour éliminer les doublons (marche pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
(en dur, pas en dynamique)
Mais là, je tourne en rond, j'arrive à rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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)
Partager