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] Utilisation variable template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 42
    Points : 24
    Points
    24
    Par défaut [XSLT] Utilisation variable template
    Bonjour,
    J'ai un deux templates dans un fichier XSL et je souhaiterai utiliser la variable tu deuxieme template dans le premier :

    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
    <!-- Premier template -->
    <xsl:template match="/home/tables">
    	<xsl:if test="blablabla">
     
                  <xsl:apply-templates />
     
    <xsl:variable name="pos3" select="@a"/>
    <xsl:variable name="pos4" select="@b"/>
    <xsl:variable name="finale1" select="$pos3 + $pos4"/>
     
            </xsl:if>
     </xsl:template>
     
    <!-- Second template -->
    <xsl:template match="home/table/premiere/departement">
     
    <xsl:if test=""> condition if avec un test...
     
         <xsl:variable name="finale2" select="$pos1 + $pos2"/>
     
         </xsl:if>
    </xsl:template>
     
      <xsl:template match="text()"/>
    </xsl:stylesheet>
    donc je souhaiterai utiliser la valeur de la variable "finale2" dans la premiere template (en occurence pouvoir faire la comparasion avec la valeur de "finale1" du premier template). Comment puis je faire ?

    Merci beaucoup

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je ne comprends pas trop mais à priori
    1/ tes templates match d une part tables et d autre part table ce qui n est pas la même chose
    2/ pourquoi ne pas utiliser les paramètres lors de l appel d un template?

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Hum j'ai également le même problème.

    Comment récupérer la valeur de la variable qui a été initialisée dans le deuxième template, dans le premier ? En effet, il est possible de passer une variable du 1er au 2e comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:template1 match="/">
    <xsl:apply-templates>
    		<xsl:with-param name="var1" select="$v1"/>
    		<xsl:with-param name="var2" select="$v2"/>
    </xsl:apply-templates>
    </xsl:template1>
     
    <xsl:template2 name="old" match="/">
    	<xsl:param name="var1"/>
    	<xsl:param name="var2"/>
    </xsl:template2>
    Mais comment renvoyer $var1 et $var2 dans <xsl:template1> ?

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    tu ne recuperes pas dnas template1 puisque tu l as déja!

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    LoL merci du conseil, je le retiendrais !

    Je m'explique plus explicitement donc.

    Je veux stocker des valeurs dans template2, les modifier, et ensuite les renvoyer dans template1, mais bien sur que je ne veux pas récupérer exactement les mêmes valeurs ! Il doit y avoir des cas ou on ne peut pas simplement traiter la valeur dans le template1, c'est pour ça que je l'envoie ailleurs pour qu'elle soit traitée. (ce qui permettrait entre autre de "re-matcher" grace au second template et ainsi de sortir du current node dans template1)

  6. #6
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    ce dont tu parles c est un peut l equivalent du passage de variable par reference... et bien ça ne marche pas...
    ce que tu peux faire par contre c récupérer un résultat qui sera un element contenant deux autres elements qui seront tes param...un peu tordu mais ça devrait marcher...

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    C'est à dire envoyer de template2 a template1 un element contenant mes deux variables modifiees ?

    Ce qui ne m'explique pas comment l'envoyer précisément de t2 à t1...
    Mais je pense plutot que je n'ai pas exactement saisi ce que tu me préconisais...

    Pourrais-tu me décrire ça autrement ?

    Merci

  8. #8
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    non ce que je dis (et cela restera a verifier) c que lorsque tu appelles ton template t2, si tu attends 2 valeurs de retour, ce n est pas possible...comme dans n importe quel langage à ma connaissance....
    maintenant le passage par ref ne fonctionne pas non plus donc le seul moyen que je vois c est de creer une variable qui encapsulera le resultat produit dans t2 du genre (et je repete que je n ai pas verifié)

    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
     
    <xsl:template match="/">
    		<xsl:variable name="res">		
    			<xsl:element name="resultatT2">
    				<xsl:call-template name="t2">
    					<xsl:with-param name="el1" select="'a'"/>
    					<xsl:with-param name="el2" select="'b'"/>
    				</xsl:call-template>
    			</xsl:element>
    		</xsl:variable>
     
    		<xsl:copy-of select="$res"/>
     
    </xsl:template>
     
    <xsl:template name="t2">
    	<xsl:param name="el1"/>
    	<xsl:param name="el2"/>	
     
    	<xsl:element name="el1"><xsl:value-of select="concat($el1,'b')"/></xsl:element>
    	<xsl:element name="el2"><xsl:value-of select="concat($el2,'c')"/></xsl:element>
    </xsl:template>
    par contre, j ai une question au apssage pour les balezes.
    je voudrais savoir pourquoi j ai autant de mal à récupérer des valuers dans $res ...je dois avoir un soucis xpath mais franchement ça n a pas l air compliqué...et pourtant je n arrive à rien faire...

  9. #9
    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
    Tiscar>>fragment node(), en xslt 1.0 c'est un genre a part, qui ne fonctionne comme un nodeset que avec le sxl:copy-of, autrement c'est une string(balises exclues/ignorées)

  10. #10
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je viens d aller faire un tour sur le site du w3c et voici ce que j ai lu concernant les result tree fragment

    In particular, it is not permitted to use the /, //, and [] operators on result tree fragments.

    conclusion, la solution que j ai donné à notre mai est inutile puisque l on ne peut rien faire au niveau xpath...
    n ayant rien trouvé sur le forum ou le site concernant les divers types de data, je vais reposter une question histoire d eclaircir tout ça..

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Pour ma part, je retire ma question qui était un problème de conceptualisation. Le fait qu'avec call ou apply-templates le résultat du template appelé soit intégré dans le template "principal" fait que ma question est vide de sens

    Merci quand même !

Discussions similaires

  1. [XSLT] utilisation de <xsl:call-template>/compteur xsl
    Par ogn dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 05/02/2008, 10h22
  2. [XSLT] Import de feuille et utilisation de template
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 15/01/2008, 17h49
  3. Réponses: 1
    Dernier message: 10/01/2007, 21h52
  4. [XSLT] utilisation d'un template ?
    Par ghohm dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 11/09/2006, 17h37
  5. [XSLT]utilisation de l'apply template
    Par koudjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 13h14

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