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 :

Passage de paramètre utilisé dans un call-template [XSL-FO]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut Passage de paramètre utilisé dans un call-template
    Bonjour,

    J'essaye de récupérer une valeur passée en paramètre dans un select qui pointe ver un tag de mes données, comme ceci :

    Appel du template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:call-template name="NoteSelected">
      <xsl:with-param name="noteLabel">premier</xsl:with-param>
    </xsl:call-template>
    Utilisations du paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xsl:template name="NoteSelected">
        <xsl:param name="noteLabel"/>
            <fo:table-cell width="1cm" border="solid black 1px" padding="2px" font-weight="bold" text-align="center">
    	    <xsl:choose>
    	        <xsl:when test="./xxx/@noteLabel = 'A'">
    		    <fo:block text-align="center">x</fo:block>
    		        </xsl:when>
    			    <xsl:otherwise>
    			       <fo:block/>
    			    </xsl:otherwise>
    			</xsl:choose>
    		</fo:table-cell>
    Le souci est que je en sais pas si le @noteLabel est bien remplacé par la valeur du paramètre "noteLabel" qui vaut 'premier' pour me donner en fin de compte ./xxx/premier

    Où ai-je commis l'erreur ?

    Merci pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Hello,

    les variables c'est avec un $ : $noteLabel . Le @ c'est pour désigner les attributs.
    Et bien entendu ça n'a aucun sens de mettre du ./xxx/ devant une variable. C'est une variable, elle n'est pas dans le document et il n'y a pas moyen d'aller l'y chercher.

    Ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:when test="$noteLabel = 'A'">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Merci pour l'info.

    Donc en passant la valeur ./xxx/premier comme valeur de paramètre et que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:when test="$noteLabel = 'A'">
    c'est la même chose que si je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:when test="./xxx/premier = 'A'">
    est-ce correct ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Euuuh. Alors attention le diable est dans les détails. Ou du moins dans la syntaxe.

    Cas A :

    ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:call-template name="truc">
      <xsl:with-param name="machin" select="bidule/chouette"/>
    </xsl:call-template>
     
    <!-- ... -->
     
    <xsl:if test="$machin = 'chose'">
    est équivalent à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="bidule/chouette = 'chose'">
    mais cas B :

    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:call-template name="truc">
      <xsl:with-param name="machin">bidule/chouette</xsl:with-param>
    </xsl:call-template>
     
    <!-- ... -->
     
    <xsl:if test="$machin = 'chose'">
    est à peu près équivalent à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="'bidule/chouette' = 'chose'">
    Différences :

    Dans le cas B il y a des quotes autour du truc équivalent, ce qui en fait une string. On vérifie si la string chose et la string bidule/chouette sont les mêmes, et c'est pas le cas, par exemple parce que chose commence par un c et bidule/chouette par un b.
    Dans le cas A il n'y a pas ces quotes, c'est un XPath qui va chercher les éléments <bidule>, et de là les éléments <chouette>. Et on vérifie si le texte de l'un d'eux est la string chose.

    Pourquoi ces différences :

    Dans le cas A on a utilisé select, dans lequel on met un XPath du truc à aller chercher.
    Dans le cas B on a mis le paramètre entre les balises <xsl:with-param>, ce qui en fait du XML littéral. Par exemple on pourrait aussi mettre des balises dedans. Là c'est pas le cas, donc en fait, le paramètre est juste un nœud texte, dont le contenu est la string bidule/chouette. Quand on compare un nœud texte à une string, il y a conversion en string et comparaison des strings.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Merci Thelvin, c'est très clair et précis et cela répond à ma demande..Merci beaucoup

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

Discussions similaires

  1. Passage de paramètre utilisé dans un "IN"
    Par Rudyyyy dans le forum Développement
    Réponses: 4
    Dernier message: 19/12/2012, 18h33
  2. Passage de paramétre dynamique dans une requete SQL
    Par d.tellier dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/01/2010, 13h57
  3. Passage de paramètre "File" dans une fonction
    Par saket2114 dans le forum Général Java
    Réponses: 10
    Dernier message: 28/10/2009, 17h40
  4. Probleme passage de paramètres à EventListener dans boucle for
    Par bigboss87 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 14/08/2009, 12h23
  5. Passage de paramètres php dans un HREF
    Par duckaurore dans le forum Langage
    Réponses: 4
    Dernier message: 08/01/2007, 16h39

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