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

XML/XSL et SOAP Discussion :

XSL - contains et variable


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    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
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    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 Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    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
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    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 Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 11
    Points
    11
    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