IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] déclaration et utilisation de variable et calcul dans un template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut [XSLT] déclaration et utilisation de variable et calcul dans un template
    Bonjour,

    J'ai un soucis dans le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template name="elementRes">
    	<xsl:param name="compteur" />
    	<xsl:param name="hasEntete" />
    	<xsl:if test="$hasEntete = 'true'">
    		<entete></entete>
    	</xsl:if>
    	<xsl:element name = "{concat('Z',$compteur)}">
    	</xsl:element>
    </xsl:template>
    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
    <xsl:template match="/Transaction/Res">
    	<xsl:variable name="nbElements" select="number(Nb_Element_Par_Page)">
    	</xsl:variable>
    	<xsl:for-each select="/Transaction/listePrix/prix">
    		<xsl:call-template name="elementRes">
    			<xsl:variable name="compteurVar" select="position()">
    			</xsl:variable>
    			 <xsl:with-param name="compteur" select="$compteurVar" />
     				<xsl:choose>
    			 	 	<xsl:when test="mod(nbElements , compteurVar - 1) = 0">
    			 	 		<xsl:with-param name="hasEntete" select="'true'"/>
    			 	 	</xsl:when>
    			 	 	 <xsl:otherwise>
    			 	 	 	<xsl:with-param name="hasEntete" select="'false'"/>
    			 	 	</xsl:otherwise>
    			 	 </xsl:choose>
    		</xsl:call-template>
    	</xsl:for-each>
    </xsl:template>
    Je définis une variable nbElements qui va matcher le nombre écrit entre les balises <Nb_Element_Par_Page> et </Nb_Element_Par_Page> (élement fils de /Transaction/Res).

    Je boucle sur chaque prix, et pour chacun d'eux :
    - je récupère dans compteurVar la position de celui-ci.
    - je veux appeler un template elementRes avec certains paramètres (compteur et hasEntete).

    Je constate que compteur est appelé correctement car j'arrive pour chaque élément à avoir les balises Z1, Z2...mais qaudn j'essaie d'appeler "hasEntete" avec true ou false, selon ma condition, j'ai une erreur de compilation de ma feuille xsl.

    Une idée du soucis?

    Merci :-)

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    1) tu as oublié des $ sur l'appel de certaines variables dans tes calculs
    2)je n'ai pas d'outils pour vérifier ni coder donc je peux faire des erreurs mais j'écrirais différemment
    Première modif placement du choose et with-param
    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
    <xsl:template match="/Transaction/Res">
    	<xsl:variable name="nbElements" select="number(Nb_Element_Par_Page)">
    	</xsl:variable>
    	<xsl:for-each select="/Transaction/listePrix/prix">
    		<xsl:call-template name="elementRes">
    			<xsl:variable name="compteurVar" select="position()">
    			</xsl:variable>
    			 <xsl:with-param name="compteur" select="$compteurVar" />
     
    			 	 		<xsl:with-param name="hasEntete" >		<xsl:choose>
    			 	 	<xsl:when test="mod($nbElements , $compteurVar - 1) = 0">true
    			 	 	</xsl:when>
    			 	 	 <xsl:otherwise>false</xsl:otherwise>
    			 	 </xsl:choose>
    </xsl:with-param >
    		</xsl:call-template>
    	</xsl:for-each>
    </xsl:template>
    deuxième modif plus de fond, j'utiliserais plutot des booléens
    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
     
    <xsl:template name="elementRes">
    	<xsl:param name="compteur" />
    	<xsl:param name="hasEntete" />
    	<xsl:if test="$hasEntete">
    		<entete></entete>
    	</xsl:if>
    	<xsl:element name = "{concat('Z',$compteur)}">
    	</xsl:element>
    </xsl:template>
     
     
    <xsl:template match="/Transaction/Res">
    	<xsl:variable name="nbElements" select="number(Nb_Element_Par_Page)">
    	</xsl:variable>
    	<xsl:for-each select="/Transaction/listePrix/prix">
    		<xsl:call-template name="elementRes">
    			<xsl:variable name="compteurVar" select="position()">
    			</xsl:variable>
    			 <xsl:with-param name="compteur" select="$compteurVar" />
     
    			 	 		<xsl:with-param name="hasEntete" select="mod($nbElements , $compteurVar - 1) = 0"/>
    		</xsl:call-template>
    	</xsl:for-each>
    </xsl:template>

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    Merci, pour la simplification, mais malgrès ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template name="elementRes">
    	<xsl:param name="compteur" />
    	<xsl:param name="hasEntete" />
    	<xsl:if test="$hasEntete">
    		<entete></entete>
    	</xsl:if>
    	<xsl:element name = "{concat('Z',$compteur)}">
    	</xsl:element>
    </xsl:template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="/Transaction/Res">
    	<xsl:variable name="nbElements" select="number(Nb_Element_Par_Page)">
    	</xsl:variable>
    	<xsl:for-each select="/Transaction/listePrix/prix">
    		<xsl:call-template name="elementRes">
    			<xsl:variable name="compteurVar" select="position()">
    			</xsl:variable>
    			<xsl:with-param name="compteur" select="$compteurVar" />
    			<xsl:with-param name="hasEntete" select="mod($nbElements , $compteurVar - 1) = 0"/>
    		</xsl:call-template>
    	</xsl:for-each>
    </xsl:template>
    J'ai cette erreur :

    ERREUR : 'Erreur de contrôle du type de l'expression 'funcall(mod, [variable-ref(nbElements/real), -(variable-ref(compteurVar/int), int-expr(1))])'.'
    ...

    Une idée?

    Merci :-)

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut re
    Re,

    Bon, je ne sais pas comment j'ai fait, mais ça marche lol.

    Merci :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclaration et utilisation de variable globale
    Par snoopy69 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/03/2009, 08h35
  2. Déclaration et utilisation de variables locales en pile
    Par johan_b dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 04/02/2008, 09h36
  3. Réponses: 12
    Dernier message: 11/04/2006, 17h00
  4. utiliser une variable se trouvant dans un autre .c
    Par richard_sraing dans le forum C
    Réponses: 2
    Dernier message: 18/03/2006, 11h59
  5. [VBS] Utiliser le variable de Windows dans un vbs
    Par Edoxituz dans le forum VBScript
    Réponses: 7
    Dernier message: 25/02/2006, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo