Hello à tous !
Tout d'abord bonne année à tous !
Alors voilà, j'ai débuté il y a peu le xslt mais ca fait un bon moment que je suis sur le problème et je ne trouve pas la solution... J'espère que vous pourrais m'aider.
Alors je vous explique le soucis. J'ai un fichier xml à modifier qui est en fait du html. (Je l'ai simplifié pour que ce soit plus compréhensible pour vous)
Et en gros ce que je voudrais au final, pour cet exemple est un récapitulatif des notes :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <table class="table_croise"> <tbody> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Marie </td> <td class="donnee"> 10 </td> </tr> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Caroline </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Marie </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Caroline </td> <td class="donnee"> 7 </td> </tr> </tbody> </table>
Francais Math
Marie 10 8
Caroline 8 7
Et ca j'ai reussi à le faire (p-e pas de la manière la plus efficace ) comme ceci :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="muench" match="table[@class='table_croise']/tbody/tr/td[@class= 'colonne']" use="."/> <xsl:key name="muench2" match="table[@class='table_croise']/tbody/tr/td[@class= 'ligne']" use="."/> <xsl:template match="table[@class='table_croise']"> <table> <tr> <td> </td> <xsl:for-each select="tbody/tr/td[@class='colonne'][generate-id() = generate-id(key('muench',.))]"> <xsl:call-template name="pivotColonne"> <xsl:with-param name="colonne" select="."/> </xsl:call-template> </xsl:for-each> <td> </td> </tr> <xsl:apply-templates mode="lignes" select="tbody/tr/td[@class= 'ligne'][generate-id() = generate-id(key('muench2',.))]"/> </table> </xsl:template> <xsl:template name="pivotColonne"> <xsl:param name="colonne"/> <td> <xsl:value-of select="$colonne"/> </td> </xsl:template> <xsl:template name="lignes" match="tbody/tr/td[@class='ligne']" mode="lignes" > <xsl:variable name="ligne" select="." /> <tr> <td> <xsl:value-of select="."/> </td> <xsl:for-each select="ancestor::tbody/tr/td[@class= 'colonne'] [generate-id() = generate-id(key('muench',.))]"> <xsl:variable name="valCol" select="." /> <xsl:for-each select="ancestor::tbody/tr[td = $valCol]"> <xsl:if test="td[@class= 'ligne'] = $ligne"> <td> <xsl:value-of select="td[@class= 'donnee']"/> </td> </xsl:if> </xsl:for-each> </xsl:for-each> </tr> </xsl:template> </xsl:stylesheet>
Mon soucis se retrouve ici, si j'ai deux fois la même table, cela ne fonctionne plus. :
Ce qui me parait logique puisque le genererate-id(key()) va toujours rechercher la premiere correspondance et du coup ca fonctionne pour le premier tableau. Mais plus pour le suivant. Mais je ne vois pas trop de solution.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 <table class="table_croise"> <tbody> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Marie </td> <td class="donnee"> 10 </td> </tr> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Caroline </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Marie </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Caroline </td> <td class="donnee"> 7 </td> </tr> </tbody> </table> <table class="table_croise"> <tbody> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Marie </td> <td class="donnee"> 10 </td> </tr> <tr> <td class="colonne"> Francais </td> <td class="ligne"> Caroline </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Marie </td> <td class="donnee"> 8 </td> </tr> <tr> <td class="colonne"> Math </td> <td class="ligne"> Caroline </td> <td class="donnee"> 7 </td> </tr> </tbody> </table>
Je ne pense pas qu'il soit possible de varier la clé ? peut-être jouer sur l'index de la key quand je genere l'id... Mais je ne trouve pas la solution...
Voilà, j'espère que mon problème est compréhensible.
Je vous remercie d'avance de votre aide.
Partager