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] Problème avec la portée des variables


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut [XSLT] Problème avec la portée des variables
    Salut tout le monde voilà j'ai un problème avec la portée d'un variable XSL. Je l'ai déclarée dans un fichier (A) xsl et je l'utilise dans un autre fichier (B) qui est lui même inclu dans le fichier (A) ou cette variable est déclarée mais cette variable n'est pas visisble dans mon fichier inclu. J'utilise RAD comme editeur. Si quelqu'un peut m'aider à ce sujet je ne sais pas trop comment faire et je ne peut pas aussi la déclarée dans le fichier (B) inclu parceque je la déclare aussi dans une autre fichier (C) qui inclu lui aussi le fichier (B).
    Merci d'avance !

  2. #2
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Pour ceux que ça intéresse voilà un peu le code :

    Fichier A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:variable name="numrows">1</xsl:variable>
     
    <xsl:include href="FICHIER_B.xsl" />
     
    le reste de code xsl
    Fichier_B : utilise la variable 'numrows'

    Fichier C : même structure que le fichier A mais la valeur de 'numrows' est différente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:variable name="numrows" select="XXXXX" />
     
    <xsl:include href="FICHIER_B.xsl" />
     
    le reste de code xsl

  3. #3
    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
    Je doute que cela puisse fonctionner, les variables xslt etant particulierement "locale"
    http://erwy.developpez.com/variable/

  4. #4
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta réponse et pour le lien lui ne me reste plus qu'à trouver une solution pour contourner mon problème.

    THKS !

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Tu dois utiliser xsl:param, comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:param name="numrows" select="1"/>
    Et là, crois-moi, ça marche

  6. #6
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    En est tu certains on peut utiliser <xsl:param /> de la même manière que <xsl:variable />. Je veux dire au niveau appel .

  7. #7
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    Hum désolé mais ça na fonctionne pas !! !! !!

  8. #8
    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


    On utilise param dans deux cas
    1) dans une template nommé
    2) pour des ressources externes a la feuilles de style et au xslt (passage de parametre exterieur)

    Si on remplit le select d'un xsl:param cela devient sa valeur par defaut.
    Autrement il prend la valeur donne par le with-param ou le programme appelant le feuille de style.
    Il n'y a aucun interet à l'utiliser comme variable, pour le reste en effet il a sensiblement le meme comportement

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par sheura
    Hum désolé mais ça na fonctionne pas !! !! !!
    Si, ça fonctionne. Vérifie ton code.

    J'utilise ça en long et en large, et de la même manière que toi en plus: un fichier XSL principal dans lequel je "déclare" les param et je fais les include des XSL secondaires et qui font référence aux param déclarés.
    Bien sûr, tu ne peux pas déclarer plusieurs fois le même param dans différents XSL inclus ni changer sa valeur (d'ailleurs, xsl:variable devrait plutôt s'appeler xsl:constant).

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Oui Erwy.
    En réalité j'utilise xsl:param pour faire passer des paramètres par le programme appelant la feuille de style. Mais ça peut aussi servir de "constante globale" (puisque xsl:variable ne le permet pas).

  11. #11
    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
    Citation Envoyé par camboui
    Oui Erwy.
    En réalité j'utilise xsl:param pour faire passer des paramètres par le programme appelant la feuille de style. Mais ça peut aussi servir de "constante globale" (puisque xsl:variable ne le permet pas).
    J'eviterais.
    J'ai deja eu des problemes avec des xsl:param "globaux" et certains processeur xslt

  12. #12
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Points : 57
    Points
    57
    Par défaut
    J'ai essayé mais sans succés. Ce que je fait maintenant c dans le second fichier je redeclare une variable avec comme select la précédente (celle de l'autre fichier). Mais en utilisant <xsl:variable /> pas <xsl:param />

  13. #13
    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
    le probleme vient de l'endroit ou tu declare ta variable, je viens en effet de regarder les xsl:include et
    The inclusion works at the XML tree level. The resource located by the href attribute value is parsed as an XML document, and the children of the xsl:stylesheet element in this document replace the xsl:include element in the including document. The fact that template rules or definitions are included does not affect the way they are processed.
    Donc une variable globale de ton inclusion doit être globale l'endroit ou elle s'insere
    Elles doivent être declare sute en dessous du xsl:stylesheet

  14. #14
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Je viens de remarquer un détail important: les paramètres globals au stylesheet ne sont pas accessibles dans un "template name".

  15. #15
    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
    Citation Envoyé par camboui
    Je viens de remarquer un détail important: les paramètres globals au stylesheet ne sont pas accessibles dans un "template name".
    Il y a 3 possibilité
    - ton processeur n'est pas conforme à la norme
    - tu as une erreur dans ton code
    - tu ne veux pas dire ce que tu as ecris

  16. #16
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par Erwy
    Il y a 3 possibilité
    - ton processeur n'est pas conforme à la norme
    MSXML 4.0
    Citation Envoyé par Erwy
    - tu as une erreur dans ton code
    Peut-être
    Citation Envoyé par Erwy
    - tu ne veux pas dire ce que tu as ecris
    Ah bon?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <xsl:param name="userid"/> 
     
    ...
     
    <xsl:template name="c_merge"> 
    <xsl:param name="txt"/> 
    <xsl:value-of select="concat('text=',$txt,'&amp;userid=',$userid)"/>
    </xsl:template>
    $userid est invisible dans le "template name" alors qu'il est bien visible ailleurs dans des "template match".
    Je n'ai pas d'erreur d'exécution, $userid est remplacé par une chaîne vide uniquement dans le "template name" comme ci-avant.

    Je précise aussi que le param est dans un fichier XSL principal différent de celui dans lequel se trouve le "template name", fichier principal dans lequel on fait des include.

    EDIT: tu as enlevé ta réponse?

  17. #17
    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
    J'avais verifié sans include je viens de refaire le test avec une valeur par defaut puis un passage de parametre.
    Aucun pb dans aucun cas, je travaille avec IE6 et msxml5


    Donc
    -soit il y un bug a ce niveau sur msxml4corrigé ensuite
    -soit tu te trompe dans tes appels et utilisations.

  18. #18
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    OK merci, je vais revérifier tout ça.

    Heureusement que tu as réagis, sans quoi j'aurais laissé les chose en l'état

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

Discussions similaires

  1. problème de portée des variables
    Par rominous41 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/05/2011, 14h43
  2. Problème portée des variables
    Par thanks33 dans le forum Débuter
    Réponses: 4
    Dernier message: 15/06/2009, 09h17
  3. Problème avec l'utilisation des variables de session
    Par WagaSeb dans le forum Langage
    Réponses: 16
    Dernier message: 22/06/2007, 15h46
  4. [MySQL] problème avec la récupération des valeurs des variables POST
    Par Jasmine80 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 11/05/2007, 16h08
  5. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34

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