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 :

Déclaration de variable pour un template -> comment faire ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut Déclaration de variable pour un template -> comment faire ?
    Bonjour,
    Voilà, j'ai essayé le code suivant (extrait seulement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:template match="enregistrements/audios/enseignements/auteur[@nom='Souffle56']">
    -> Ca fonctionne très bien, mais si je veux réutiliser ce code avec cette fois la variable "$auteur_choisi", comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "Souffle56"/></xsl:variable>
    <xsl:template match="enregistrements/audios/enseignements/auteur[@nom='{$auteur_choisi}']">
    là il ne la prend pas !
    Aurais-je mal formulé mon template ? Qu'en pensez vous, SVP ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Personne n'aurait une idée ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Il faut passer par des call-template & with-paramm:,
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:variable name="xx">
      <html>
      <body>
      <xsl:call-template name="show_title">
        <xsl:with-param name="title" select="titre test"/>
      </xsl:call-template>
      </body>
      </html>
    </xsl:variable>
     
    <xsl:template name="show_title" match="/">
      <xsl:param name="title" />
      <xsl:for-each select="catalog/cd">
        <p>Title: <xsl:value-of select="$title" /></p>
      </xsl:for-each>
    </xsl:template>
     
    </xsl:stylesheet>

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    En fait tu peux faire des apply-templates avec params aussi, c'est mieux je pense :
    http://www.zvon.org/xxl/XSL-Ref/Tuto...eters/vp5.html

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Ok Morbo,
    pour essayer avec des "apply-templates avec params"... Après, aurais-tu quelque autre adresse qui me soit un peu plus "accessible" à ce sujet ? car je ne fais que débuter dans le domaine, et là, mes compétences ne me permettent pas d'assimiler l'exemple que tu me proposes à travers ton lien !
    Par avance, Merci !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Tu pourrais mettre le code de ton xml (simplifié si besoin) et celui de ton xsl-t entier?
    Je regarderai ça demain.

    Mais en gros, l'idée c'est que tu ne peux pas passer de variables lorsque tu définis un template (une règle), ce qui est logique. Par contre tu peux en passer lorsque tu appliques/appelles cette règle (dans les apply/call-template).

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Merci Morbo,
    pour les précisions que tu me donnes... En fait, j'ai fait une petite pause depuis tout à l'heure, histoire de me détendre un peu les neurones... et depuis, j'ai pu reprendre l'adresse que tu m'as proposé et commencer à assimiler... En fait, ça n'a rien de compliqué, j'avais juste besoin de me ressourcer un peu... Sinon, je ne sais pas encore si je vais savoir adapter tout cela...
    Du coup, je retiens d'autant plus ta proposition de regarder le code de plus près...
    Encore Merci, c'est super sympa !
    Voici le code concerné, l'idée étant de pouvoir paramétrer la partie du code (mise en rouge) de la ligne suivante:
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[1]/album[1]/regroupement" />):
    XML:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="UTF-8"?>
    <enregistrements>
    	<audios>
    		<enseignements>
    			<auteur nom="Dess">
    				<album titre="Un sens à  sa vie !">
    					<largeur>462</largeur>
    					<regroupement sous_titre="Etes-vous heureux ?">
    						<ligne>Certainement !</ligne>
    						<ligne>Assurément !</ligne>
    						<ligne>Ca c'est sûr !</ligne>
    					</regroupement>
    					<regroupement sous_titre="Tout le temps ?">
    						<ligne>Euh !</ligne>
    						<ligne>Ben !</ligne>
    						<ligne>Ca dépend !</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    			<auteur nom="Joe">
    				<album titre="Vive la vie !">
    					<largeur>500</largeur>
    					<regroupement sous_titre="One">
    						<ligne>A</ligne>
    						<ligne>B</ligne>
    						<ligne>C</ligne>
    					</regroupement>
    					<regroupement sous_titre="Two">
    						<ligne>A2</ligne>
    						<ligne>B2</ligne>
    						<ligne>C2</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    		</enseignements>
    	</audios>
    </enregistrements>
    XSL:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
    </head>
    <body bgcolor="#FFFFFF">
    <p>Début
    </p>
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[1]/album[1]/regroupement" />
    <p>End
    </p>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="regroupement">
      <p>
        <xsl:apply-templates select="@sous_titre"/> 
        <xsl:apply-templates select="ligne"/> 
      </p>
    </xsl:template>
     
    <xsl:template match="@sous_titre">
    	* <xsl:value-of select="."/>
    </xsl:template>
     
    <xsl:template match="ligne">
    	- <xsl:value-of select="."/>
    </xsl:template>
     
    </xsl:stylesheet>

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ok, je vois le principe, mais ta variable "auteur_choisi", elle va venir d'où?

    En tous les cas t'auras même pas besoin de "with-param" un simple apply-template sur le noeud sélectionné en XPATH devrait suffire. Ce xpath utilisera la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enregistrements/audios/enseignements/auteur[@nom=$auteur_choisi]/album[1]/regroupement

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Ok, je vois le principe, mais ta variable "auteur_choisi", elle va venir d'où?
    A vrai dire, j'en suis encore à la phase essais-> Sur ce point, je n'ai pas encore vraiment abordé !
    Sinon, j'ai bien rentré la ligne proposée dans le code XSL précédent (avec la définition préalable de la variable concernée), selon le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "Dess"/></xsl:variable>
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[@nom=$auteur_choisi]/album[1]/regroupement" />
    Mais là, il ne m'affiche plus que
    Début

    End
    Qu'est-ce-qui-se-passe-t'il ?
    Pourquoi ne prend t-il pas en compte cette variable ?
    -----------------------------------------------------------------------
    PS : Voici le nouveau code XSL, au complet:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
    </head>
    <body bgcolor="#FFFFFF">
    <p>Début
    </p>
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "Dess"/></xsl:variable>
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[@nom=$auteur_choisi]/album[1]/regroupement" />
    <p>End
    </p>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="regroupement">
      <p>
        <xsl:apply-templates select="@sous_titre"/> 
        <xsl:apply-templates select="ligne"/> 
      </p>
    </xsl:template>
     
    <xsl:template match="@sous_titre">
    	* <xsl:value-of select="."/>
    </xsl:template>
     
    <xsl:template match="ligne">
    	- <xsl:value-of select="."/>
    </xsl:template>
     
    </xsl:stylesheet>

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Sisi, il prend bien en compte la variable, mais elle est vide !
    Car en effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "Dess"/></xsl:variable>
    Initialise la variable avec la valeur du noeud "Dess", qui n'existe pas!

    Par contre ceci devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name= "auteur_choisi">Dess</xsl:variable>

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Alors là, je ne te suis plus... En effet, je viens de vérifier un autre petit pgm (un peu du même genre) que j'ai développé dernièrement et, il y a bien les "guillemets" dans la déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "Souffle56"/></xsl:variable>
    et... Ca marche !
    Enfin, par acquis de conscience, j'ai essayé ta suggestion
    -> Ben non, ça passe toujours pas... Dommage ! T'aurais pas une autre idée ?

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ben faudrait que je teste, mais le select="qqchose" , c'est pour sélectionner un noeud.
    Sinon tu peux peut être essayer ces syntaxes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name= "auteur_choisi"><xsl:value-of select= "'Dess'"/></xsl:variable>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name= "auteur_choisi" select="'Dess'"/>
    Note bien qu'il y a des apostrophes en plus justement pour dire : je veux la chaine de caractères et non le noeud XML.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Euh, très peu pour moi, Morbo,
    C'est moi, en fait, qui ai fait une p'tite cafouille dans mes test !
    Je viens de reprendre ta proposition -> Ca fonctionne (pfoum ! champagne ! cotillons ! accordéon !)
    Ouai ben, du coup, tu m'excuseras, mais c'est la fête, à la maison !
    Allez, bon, pasque j'te dois bien cela :
    Sur ce, bonne nuit à toi !

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    hop-hop-hop, pas plus haut que le bord !

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Points : 80
    Points
    80
    Par défaut
    Coooooool !
    Et puis, rézolu !
    At'chao !

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

Discussions similaires

  1. Déclaration des variables pour PL/SQL
    Par amola1992 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 10/03/2015, 10h17
  2. [XL-2007] Déclaration de variable pour plusieurs formulaires
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/07/2014, 10h38
  3. [MEX] Probleme de déclaration de variable pour fonction MEX
    Par edwoodhxc dans le forum Signal
    Réponses: 7
    Dernier message: 03/05/2012, 15h18
  4. Réponses: 0
    Dernier message: 03/12/2007, 12h28
  5. Déclarations de variables pour tous les éléments d'un workbook
    Par kebab666 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 16h50

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