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] les variables???


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut [XSLT] les variables???
    Rebonjour et oui encore moi il ne va y avoir que sdes messages à moi sur ce forum bientot.

    Donc voici mon nouveua pb :

    Comment on utilise des varibles en xsl. Voilà j'ai une donnée à afficher mais que si elle est différente de la précédente le tout dans une instruction for each.
    Mais on m'a dit que les variables se comportent en fait comme des constantes donc je ne peut pas modifier la valeur d'une variable.
    Du coup je ne sais pas par quel bout prendre mon pb.

    Merci d'avance d'un brin de solution.

    XSL ca commence à me.....
    Lydiane

  2. #2
    Membre expérimenté
    Avatar de knotty
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut
    oui, on ne fait pas du XSL comme de la programmation classique,

    Ce que tu peux faire, c'est utiliser la recursivite, i.e appeler ton template a l'interieur du template.
    Tu peux passer un argument a un template, et donc conserver une variable d'un template a l'autre.

    Attention, comme dit B. Stroustrup, la recursivite est divine, mais elle est tres gourmande en memoire.
    Christophe Ludet
    Testez vos connaissances Java - http://knotty.developpez.com
    Donner des ailes a votre application (J2EE patterns) - http://knotty.developpez.com/j2ee

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut
    Merci pour cet espoir de solution même si pour le moment je ne compred pas bien l'histoire du template dans un template.

    Je vais chercher de ce coté la merci.

    Lydiane

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 20
    Par défaut
    un petit exemple peut-être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:template name="unNom">
       <xsl:param name="unParam"/>
       <xsl:if test="unTest">
          <!-- une action éventuelle (affichage de texte...) -->
          <xsl:call-template name="unNom">
             <xsl:with-param name="unParam" select="nouvelleValeurDeUnParam"/>
          </xsl:call-template>
       </xsl:if>
    </xsl:template>

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut Merci
    Merci pour cet exemple malheureusement je ne peux le tester maintenant mais je te tiens au courant.

    Lydiane

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut Essai
    Salut, je suis en train d'essayer ta solution mais j'ai un petit pb

    J'ai un test if à faire mais je voudrais savoir si mon parametre dans lequel je met la valeur de Proto est égal à la prochaine valeur de Proto.
    Si 'jarrive a faire ça je pense que j'arriverai à m'en sortir.


    Lydiane qui galer qui galere

    [/code]

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 20
    Par défaut
    désolé Lydie, mais j'ai un peu de mal à comprendre ton problème

    Pourrais-tu préciser ce que tu veux faire exactement (quelles sont les variables en jeux, leur rôle, ce que tu veux afficher...) ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut
    Voilà ou j'en suis mais ca boucle
    La c'est quand j'appelle mon 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
     
    <xsl:for-each select="PrescriptionAAdministrer[Proto!='']">
     
    <xsl:call-template name="Protocoles">
         <xsl:with-param name="courant">                                  
             <xsl:value-of select="Proto"/></xsl:with-param>
         <xsl:with-param name="suivant">
             <xsl:value-of select="following::Proto"/></xsl:with-param>
     </xsl:call-template>						
    </xsl:for-each>
     
    </fo:table-body>
    </fo:table>
    </fo:block>
    </fo:flow>
    </fo:page-sequence>
    </fo:root>
    </xsl:template>
    Et voila mon template qui boucle

    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>	
    <xsl:template name="Protocoles"> 
       <xsl:param name="courant"></xsl:param>
       <xsl:param name="suivant"><xsl:value-of select="following::Proto"/></xsl:param>
       <xsl:if test="$courant!=$suivant"> 
       <fo:table-row>
       <fo:table-cell>
       <fo:block><xsl:value-of select="$courant"/></fo:block>
       </fo:table-cell>
       </fo:table-row>   
       </xsl:if> 
       <fo:table-row>
       <fo:table-cell>
       <fo:block><xsl:value-of select="Produit/Prod_nom"/></fo:block>
       </fo:table-cell>
       </fo:table-row>  
     
        <xsl:call-template name="Protocoles"> 
       <xsl:with-param name="courant"><xsl:value-of    select="following::Proto"></xsl:value-of>
     
    </xsl:with-param>
          </xsl:call-template> 
    </xsl:template> 	
    </xsl:stylesheet>
    Le principe est donc de parcourir toutes les PrescriptionAAdministrer qui ont un protocole. Puis afficher le protocole que s'il est différent du suivant et afficher le nom du produit de la prescription dans tous les cas.
    Mais ca boucle !!!

    Merci d'avance.

    Lydiane

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut
    En fait je pense que cela vient du fait que je dis que le parametre suivant c'est following:roto il faudrait que j'arrive à dire que c'est following::$courant mais ca me génere une erreur qui dit null!!

    En effet je dois etre nulle depuis le temps que je cherche.

    Merci d'avance.

    Lydiane

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 20
    Par défaut
    je pense que tu fais une mauvaise utilisation du "following".
    En effet, "following:roto" te renvoie TOUS les Proto après ton noeud courant, et pas forcément que les fils!

    A mon avis, pour faire ce que tu veux, tu devrais utiliser un indice que tu vas également transmettre dans le template et incrémenter à chaque appel récursif. Après, tu utilise "following:roto[i]" pour n'en sélectionner qu'un.

    Ce qu'il faut remarquer aussi, c'est qu'à chaque appel de ton template, ta position dans l'arbre XML ne change pas! Ainsi, ton "foolowing:roto" vaut toujours la même chose et ça boucle. D'où l'intérêt de l'indice que tu incrémente à chaque passage.

    Petit détail (mais c'est peut-être du au copier/coller), tu oublies de passer le param "suivant" à la fin de ton template.

    Voilà, Enjoy
    Fred

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Par défaut
    MERCI CA MARCHE!!!!

    En fait voila le code :
    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
    <xsl:template name="Protocoles"> 
       <xsl:param name="courant"></xsl:param>
        <xsl:param name="compteur">1</xsl:param>
       <xsl:param name="suivant" select="following::Proto[$compteur]"></xsl:param>
        <xsl:if test="position()='1'">
        <fo:table-row>
        <fo:table-cell>
        <fo:block font-weight="bold"><xsl:value-of select="$suivant"/></fo:block>
        </fo:table-cell>
       </fo:table-row>   
       </xsl:if> 
       <fo:table-row>
       <fo:table-cell>
       <fo:block><xsl:value-of select="Produit/Prod_nom"/></fo:block>
       </fo:table-cell>
       </fo:table-row>  
       <xsl:if test="$courant!=$suivant and position()!='1'"> 
       <fo:table-row>
       <fo:table-cell>
       <fo:block font-weight="bold"><xsl:value-of select="$suivant"/></fo:block>
       </fo:table-cell>
       </fo:table-row>   
     
       </xsl:if> 
    </xsl:template> 	
    </xsl:stylesheet>
    Sans toi et ton idée de compteur je ne m'en serais jamais sortie.
    Merci !!!!!!!!!!!!!!!!!!!!!!!! Si un jour t'as un pb .. enfin si je peux répondre n'hésote pas!!


    Lydiane

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 20
    Par défaut
    C'était un plaisir

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

Discussions similaires

  1. [XSLT] petite question sur les variables
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/11/2009, 10h46
  2. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  3. [XSLT] assembler les variables
    Par Gaetan_ dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/01/2007, 15h11
  4. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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