Soit le fichier XML suivant
auquel j'applique la feuille XSL 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
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 <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="file-xsl.xsl"?> <root> <structure id="0001"> <reference>STRUCT0001</reference> <libelle refentite="a" numcreation="b">Structure 1</libelle> <telephone>04-99-61-90-29</telephone> <nombre>0</nombre> <intervenants id="rupture"></intervenants> <adresse>Rue de la république</adresse> <entite></entite> </structure> <structure id="0002"> <reference>STRUCT0002</reference> <libelle>Structure 2</libelle> <telephone>04-99-61-90-25</telephone> <nombre>2</nombre> <intervenants id="rupture"> <intervenant> <nom refentite="a" numcreation="b">DUPOND</nom> <prenom>Marcel</prenom> </intervenant> <intervenant> <nom refentite="a" numcreation="b">DURAND</nom> <prenom>Jacques</prenom> </intervenant> </intervenants> <adresse></adresse> <entite></entite> </structure> <structure id="0003"> <reference>STRUCT0003</reference> <libelle>Structure 3</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> <intervenants id="rupture"></intervenants> <adresse></adresse> <entite>Mon entité</entite> </structure> <structure id="0004"> <reference>STRUCT0004</reference> <libelle>Structure 4</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="0005"> <reference>STRUCT0005</reference> <libelle>Structure 5</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="0006"> <reference>STRUCT0006</reference> <libelle>Structure 6</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="0007"> <reference>STRUCT0007</reference> <libelle>Structure 7</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="0008"> <reference>STRUCT0008</reference> <libelle>Structure 8</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="0009"> <reference>STRUCT0009</reference> <libelle>Structure 9</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="00010"> <reference>STRUCT00010</reference> <libelle>Structure 10</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="00011"> <reference>STRUCT00011</reference> <libelle>Structure 11</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> <structure id="00012"> <reference>STRUCT00012</reference> <libelle>Structure 12</libelle> <telephone>04-99-61-90-20</telephone> <nombre>0</nombre> </structure> </root>
selon que je fasse la transformation côté client via l'exemple fourni sur ce forum ou côté serveur via
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Import Entete --> <xsl:import href="entete.xsl"/> <xsl:output method="html" indent="yes"/> <!-- Parametres d entrees --> <xsl:param name="champTri"/> <xsl:param name="sensTri"/> <xsl:param name="nbEnregPage"/> <xsl:param name="filterKey"/> <xsl:param name="filterValue"/> <!-- Template lien --> <xsl:template name="lien"> <xsl:param name="refEntite"/> <xsl:param name="numCreation"/> <xsl:param name="item"/> <xsl:choose> <xsl:when test="$refEntite != '' and $numCreation != ''"> <td><a href="concat($refEntite,' ',$numCreation)"><xsl:value-of select="."/></a></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="."/></td> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- Fin Template lien --> <xsl:template match="root"> <table> <!-- Chargement Entete --> <xsl:call-template name="entete"/> <!-- Pour Chaque ligne --> <xsl:for-each select="node()[child::*[name()=$filterKey and contains(text(),$filterValue)] and position() > 0 and position() < $nbEnregPage+1]"> <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/> <xsl:variable name="vRefEntite" select="@refentite"/> <xsl:variable name="vNumCreation" select="@numcreation"/> <!-- tri --> <tr> <!-- Colorer une ligne sur 2 --> <xsl:if test="(position() mod 2)=0"> <xsl:attribute name="bgcolor">grey</xsl:attribute> </xsl:if> <!-- Pour chaque colonne --> <xsl:for-each select="*"> <xsl:choose> <!-- Si noeud pouvant etre multiple --> <xsl:when test="@id='rupture'"> <xsl:if test="count(*) > 1"> <td> <table> <xsl:for-each select="node()"> <tr> <td> <xsl:call-template name="lien"> <xsl:with-param name="refEntite" select="@refentite"/> <xsl:with-param name="numCreation" select="@numcreation"/> <xsl:with-param name="item" select="."/> </xsl:call-template> </td> </tr> </xsl:for-each> </table> </td> </xsl:if> <xsl:if test="count(*) < 1"> <td></td> </xsl:if> </xsl:when> <!-- Sinon appel template lien --> <xsl:otherwise> <xsl:call-template name="lien"> <xsl:with-param name="refEntite" select="@refentite"/> <xsl:with-param name="numCreation" select="@numcreation"/> <xsl:with-param name="item" select="."/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:for-each> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
Je me retrouve avec un résultat différent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(new StreamSource(xslt)); transformer.setParameter("champTri","reference"); transformer.setParameter("sensTri","ascending"); transformer.setParameter("nbEnregPage","10"); transformer.setParameter("filterKey","reference"); transformer.setParameter("filterValue","STRUC"); transformer.transform(new StreamSource(xml),new StreamResult(System.out));
La transformation côté client me ramène exactement les enregs demandés (10), par contre celle côté serveur me ramène seulement 5 enregs.
Je ne vois pas d'où peut venir le problème. Si ce n'est de ma feuille XSL qui doit être mal codée...
Merci d'avance.
Partager