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

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 20
    Points : 9
    Points
    9

    Par défaut XSL - contains et variable

    Bonsoir,

    J'ai créé une fonction split récursive. J'essaie de faire en sorte que celle-ci soit le plus générique possible.
    Je souhaite intégrer mon séparateur en tant que variable mais cela n'est pas pris en compte.

    APPEL du template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    			<xsl:call-template name="split">
    				<xsl:with-param name="nomchp" select="dxl:item[@name='typereunion']"/>
    				<xsl:with-param name="sep">;</xsl:with-param>	
    			</xsl:call-template>
    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:template name="split">
    		<xsl:param name="nomchp"/>
    		<xsl:param name="sep"/>
    		<xsl:choose>
    			<xsl:when test="contains($nomchp,$sep)">
    				<xsl:value-of select="substring-before($nomchp,$sep)"/><br/>
    				<xsl:call-template name="split">
    					<xsl:with-param name="nomchp">
    						<xsl:value-of select="substring-after($nomchp,$sep)"/>
    					</xsl:with-param>
    				</xsl:call-template>
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:value-of select="$nomchp"/>
    			</xsl:otherwise>
    		</xsl:choose>
    	</xsl:template>
    Si je remplace $sep par ';' cela fonctionne très bien mais je souhaite réellement passer par le paramètre dans mon appel au template.

    Merci d'avance.

    Cordialement

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 753
    Points : 19 952
    Points
    19 952

    Par défaut

    Hello,

    tu as oublié de repasser le paramètre $sep lors de l'appel récursif.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Inscrit en
    octobre 2011
    Messages
    1 326
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 326
    Points : 2 333
    Points
    2 333

    Par défaut

    Si je remplace $sep par ';' cela fonctionne très bien mais je souhaite réellement passer par le paramètre dans mon appel au template.
    Oui, pour un texte ';' statique, ces deux expression sont équivalentes.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:with-param name="sep">;</xsl:with-param>
    <!--
    <xsl:with-param name="sep" select="';'" />
    -->
    Pour établir un xsl:with-param dynamiquement via un paramètre global qui est nommé x, par exemple, on fait comme ça.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:with-param name="sep" select="$x" />

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 20
    Points : 9
    Points
    9

    Par défaut

    Bonjour,

    Je ne suis pas sûr d'avoir tout compris :

    J'ai mis en place le code suivant mais cela ne fonctionne pas pour autant, mais je pense que je n'ai pas compris le principe de l'appel dynamique

    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:call-template name="split">
    				<xsl:with-param name="nomchp" select="dxl:item[@name='typereunion']"/>
    				<xsl:with-param name="sep" select="$x">;</xsl:with-param>	
    			</xsl:call-template>
     
    	<xsl:template name="split">
    		<xsl:param name="nomchp"/>
    		<xsl:with-param name="sep"/>
    		<xsl:choose>
    			<xsl:when test="contains($nomchp,$x)">
    				<xsl:value-of select="substring-before($nomchp,$x)"/><br/>
    				<xsl:call-template name="split">
    					<xsl:with-param name="nomchp">
    						<xsl:value-of select="substring-after($nomchp,$x)"/>
    					</xsl:with-param>
    				</xsl:call-template>
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:value-of select="$nomchp"/>
    			</xsl:otherwise>
    		</xsl:choose>
    	</xsl:template>

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    11 753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 11 753
    Points : 19 952
    Points
    19 952

    Par défaut

    Dans ce cas, ignore-le et relis juste ce que moi j'ai dit -_-°... Je t'avoue que je vois pas trop l'intérêt de ce qu'il dit, il n'y a pourtant pas de raison de croire que tu le savais pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre émérite
    Inscrit en
    octobre 2011
    Messages
    1 326
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 326
    Points : 2 333
    Points
    2 333

    Par défaut

    $x etc, c'est pour illustrer la façon de raisonner dans le codage functionnel templatif. Ici, c'est fait comme ça.
    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
    			<xsl:call-template name="split">
    				<xsl:with-param name="nomchp" select="dxl:item[@name='typereunion']"/>
    				<xsl:with-param name="sep">;</xsl:with-param>	
    			</xsl:call-template>
     
    	<xsl:template name="split">
    		<xsl:param name="nomchp"/>
    		<xsl:with-param name="sep"/>
    		<xsl:choose>
    			<xsl:when test="contains($nomchp,$sep)">
    				<xsl:value-of select="substring-before($nomchp,$sep)"/><br/>
    				<xsl:call-template name="split">
    					<xsl:with-param name="nomchp">
    						<xsl:value-of select="substring-after($nomchp,$sep)"/>
    					</xsl:with-param>
                                            <xsl:with-param name="sep" select="$sep" />
    				</xsl:call-template>
    			</xsl:when>
    			<xsl:otherwise>
    				<xsl:value-of select="$nomchp"/>
    			</xsl:otherwise>
    		</xsl:choose>
    	</xsl:template>

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    septembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2007
    Messages : 20
    Points : 9
    Points
    9

    Par défaut


    ok merci.

    J'ai donc modifié et j'ai mis le code ci-dessous :

    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
     
    <xsl:template name="split">
    	<xsl:param name="nomchp"/>
    	<xsl:param name="sep"/>
    	<xsl:choose>
    		<xsl:when test="contains($nomchp,$sep)">
    			<xsl:value-of select="substring-before($nomchp,$sep)"/><br/>
    			<xsl:call-template name="split">
    				<xsl:with-param name="sep" select="$sep">
    				</xsl:with-param>
    				<xsl:with-param name="nomchp">
    					<xsl:value-of select="substring-after($nomchp,$sep)"/>
    				</xsl:with-param>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:value-of select="$nomchp"/>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    Bon cela fonctionne et je remercie l'ensemble des acteurs qui ont permis la résolution.

    "Un petit pas pour l'Homme, un grand pas pour moi"

Discussions similaires

  1. [XSL] Passage de variable dans un template
    Par Otarie dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/11/2005, 23h50
  2. Compteur XSL...Portée des variables limitée
    Par lanfeustdetroy dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 03/06/2005, 14h12
  3. [XSL]Creer un variable pour mettre un width="" pou
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 28/04/2005, 16h37
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58
  5. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19

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