Bonjour,
Je rencontre un problème avec une transformation XSLT.
Je dispose d'un fichier xml de ce type :
Et je souhaiterais afficher un tableau html de la forme suivante :
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 <?xml version="1.0" encoding="iso-8859-1"?> <html> <body> <table border="0" width="640" cellpadding="1" cellspacing="5"> <tr class="rt"> <td colspan="3">A0</td> </tr> <tr class="rt"> <td>B1</td> <td>B2</td> <td>B3</td> </tr> <tr class="rt"> <td>C1</td> <td>C2</td> <td>C3</td> </tr> <tr> <td colspan="3">D0</td> </tr> <tr class="rt"> <td>E1</td> <td>E2</td> <td>E3</td> </tr> <tr class="rt"> <td colspan="3">F0</td> </tr> <tr class="rt"> <td>G1</td> <td>G2</td> <td>G3</td> </tr> <tr class="rt"> <td>H1</td> <td>H2</td> <td>H3</td> </tr> </table> </body> </html>
Pour cela, j'ai donc utilisé preceding-sibling :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A0 --- B1 --- B2 --- B3 A0 --- C1 --- C2 --- C3 D0 --- E1 --- E2 --- E3 F0 --- G1 --- G2 --- G3 F0 --- H1 --- H2 --- H3
J'obtiens le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <xsl:for-each select="//tr[@class='rt']"> <xsl:if test="string-length(td[position()=2]/.)>0"> <xsl:choose> <xsl:when test="preceding-sibling::tr/td/@colspan='3'"> <xsl:value-of select="preceding-sibling::tr/td/."/> </xsl:when> </xsl:choose> --- <xsl:value-of select="td[position()=1]/."/> --- <xsl:value-of select="td[position()=2]/."/> --- <xsl:value-of select="td[position()=3]/."/><br/> </xsl:if> </xsl:for-each>
Comment faire pour récupérer la bonne première valeur de chaque ligne : comment récupérer la valeur du tag tr[@colspan='3'] le plus proche (précédent) du tag tr en cours?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A0 --- B1 --- B2 --- B3 A0 --- C1 --- C2 --- C3 A0 --- E1 --- E2 --- E3 A0 --- G1 --- G2 --- G3 A0 --- H1 --- H2 --- H3
Merci d'avance pour votre aide
Partager