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] Modifications de variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expert
    Inscrit en
    janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut [XSLT] Modifications de variable
    Bonjour,

    Je m'essaye actuellement aux XSLT et je bloque sur un point précis : contourner l'impossibilité de modifier une variable. En fait j'ai une suite de caractères que je veux modifier au fur et à mesure de l'application de mes différents templates.

    Prenons un exemple simple :
    chaineTest = "11"
    valeur= "ABCDEFGHIJK"

    La chaine de test va me servir a faire des conditions pour découper la chaine "valeur"
    1/ Si le premier caractère de "chaineTest" vaut 1 alors je veux récupérer les 3 premiers caractères de la chaine valeur (et donc les retirer de cette variable)
    2/ si le deuxieme caractère de "chaineTest" vaut 1 je veux récupérer les 4 premiers caractères de valeur (restants).

    Ca donnerait ca en sortie avec chaineTest = 11:
    <noeud1>ABC</noeud1>
    <noeud2>DEFG</noeud2>

    Par contre avec chaineTest = 01 j'aurai ca:
    <noeud2>ABCD</noeud2>

    Maintenant mon XSL ressemble a ca:
    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 name="MonTemplate">
    	<xsl:variable name="chaineTest">11</xsl:variable>
    	<xsl:variable name="valeur">ABCDEFGHIJK</xsl:variable>
     
    	<xsl:if test="substring($chaineTest, 1, 1) = string(1)"> 
    		<noeud1><xsl:value-of select="substring($valeur,1,3)"/></noeud1>
     
    		<!-- Retire les trois premiers caractères de valeur -->
    		<xsl:variable name="valeur"><xsl:value-of select="substring($valeur,4)"/></xsl:variable>
    	</xsl:if>		
     
    	<xsl:if test="substring($chaineTest, 2, 1) = string(1)"> 
    		<noeud1><xsl:value-of select="substring($valeur,1,4)"/></noeud1>
     
    		<!-- Retire les quatre premiers caractères de valeur -->
    		<xsl:variable name="valeur"><xsl:value-of select="substring($valeur,5)"/></xsl:variable>
    	</xsl:if>
    </xsl:template>
    Le problème qui se pose est que j'ai beau modifier la valeur de la variable valeur dans le if, quand je passe au if suivant la variable n'a pas changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <noeud1>ABC</noeud1>
    <noeud1>ABCD</noeud1>
    Je ne trouve pas de solutions propres pour contourner le problème. Je ne peux en effet pas renvoyer la nouvelle valeur depuis un template vu que j'ai aussi besoin d'écrire en sortie dans mon XML les valeurs des noeuds.

    Est-il possible d'avoir des paramètres entrants et sortants dans les template, ou de modifier une variable par une astuce particulière?

    Merci d'avance!

    Koopajah

  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 : 45
    Localisation : France

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 4 967
    Points : 11 242
    Points
    11 242
    Par défaut
    Citation Envoyé par koopajah
    Est-il possible d'avoir des paramètres entrants et sortants dans les template
    Tu peux appeler d'autres tempates (via call ou apply) dans un templates et leur passer des paramètres, tu peux aussi faire ton call templates dans une variables (attentions le resultat en xslt 1.0 est alors de type fragment node) et reultiliser alors le résultat

    Citation Envoyé par koopajah
    ou de modifier une variable par une astuce particulière?
    NON!!!
    http://xml.developpez.com/faq/?page=3#xslt_variable

  3. #3
    Membre expert
    Inscrit en
    janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    J'avais bien lu la FAQ et je sais que ca n'est pas possible par définition en XSLT, pourtant il y a bien des astuces (comme de redéfinir une variable avec le même nom et de récupérer dedans la sortie d'un template) je demandais donc s'il y en avait d'autres, j'avais certaines idées mais elles ne fonctionnent pas dans mon cas.

    Merci en tout cas pour la confirmation, ça m'évitera de chercher pendant une semaine pour quelquechose qui n'est pas faisable.

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

Discussions similaires

  1. [XSLT][Javascript] recup/modif xsl:variable depuis javascript
    Par hjn31 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/09/2009, 11h25
  2. [C#][XSLT] Passer des variables
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/09/2005, 15h26
  3. [XSLT] incrémenter une variable
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/09/2005, 18h12
  4. Réponses: 3
    Dernier message: 01/09/2005, 12h56
  5. [XSLT]prob de variables(xpath) param d'un appel de template
    Par zerax dans le forum XSL/XSLT/XPATH
    Réponses: 15
    Dernier message: 05/04/2005, 16h01

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