[XSLT] Résultat différent, selon transformation côté client ou serveur
Soit le fichier XML suivant
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 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> |
auquel j'applique la feuille XSL suivante
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 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> |
selon que je fasse la transformation côté client via l'exemple fourni sur ce forum ou côté serveur via
Code:
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)); |
Je me retrouve avec un résultat différent.
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.