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] Problème avec la fonction contains


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut [XSLT] Problème avec la fonction contains
    Bonjour à tous,
    Cela fait une matinée complète que je planche sur une méthode de capitalisation des mots d'une phrase. Mon problème est que c'est la totalité de ma phrase qui se retrouve mise en majuscule O_o. J'ai l'impression que le "contains" renvoie toujours faux. Et je comprend pas pourquoi...

    Merci de votre aide.
    Ci dessous mon code:
    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
    <xsl:template name="capitalize">
    	<xsl:param name="string"/>
    	<xsl:param name="caps" select="false()"/>
    	<xsl:variable name="separator" select="a"/>
     
    	<xsl:if test="$caps">
    		<xsl:value-of select="translate(substring($string, 1,1), 'abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñ','ABCDEFGHIJKLMNOPQRSTUVWXYZAAAAEEEEIIIOOOOUUUN')" />
    	</xsl:if>
    	<xsl:if test="not($caps)">
    		<xsl:value-of select="translate(substring($string, 1,1), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') " />
    	</xsl:if>	
     
    	<xsl:variable name="char" select="substring($string, 1,1)" />
    	<xsl:variable name="nextToCaps">
    		<xsl:if test="contains($separator, $char)">
    			<xsl:value-of select="false()" />
    		</xsl:if>
    		<xsl:if test="not( contains($separator, $char) )">
    			<xsl:value-of select="true()" />
    		</xsl:if>
    	</xsl:variable>
     
    	<xsl:if test="string-length(substring($string, 2)) &gt; 0">
    		<xsl:call-template name="capitalize">
    			<xsl:with-param name="string" select="substring($string, 2)" />
    			<xsl:with-param name="caps" select="$nextToCaps" />
    		</xsl:call-template>
    	</xsl:if>
    </xsl:template>

  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 : 48
    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
    elle est bizarre ta variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="separator" select="a"/>
    Il faut que ton noeud courant est toujours un fils <a></a> pour que cela fonctionne

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    oups, excusez moi c'etait pour faire un test... j'ai oublié de la remettre d'origine...

    Voici le code d'origine:
    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
    <xsl:template name="capitalize">
    	<xsl:param name="string"/>
    	<xsl:param name="caps" select="false()"/>
    	<xsl:variable name="separator" select="abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñABCDEFGHIJKLMNOPQRSTUVWXYZ"/>
     
    	<xsl:if test="$caps">
    		<xsl:value-of select="translate(substring($string, 1,1), 'abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñ','ABCDEFGHIJKLMNOPQRSTUVWXYZAAAAEEEEIIIOOOOUUUN')" />
    	</xsl:if>
    	<xsl:if test="not($caps)">
    		<xsl:value-of select="translate(substring($string, 1,1), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') " />
    	</xsl:if>	
     
    	<xsl:variable name="nextToCaps">
    		<xsl:if test="contains($separator, substring($string, 1,1))">
    			<xsl:value-of select="false()" />
    		</xsl:if>
    		<xsl:if test="not( contains($separator, substring($string, 1,1)) )">
    			<xsl:value-of select="true()" />
    		</xsl:if>
    	</xsl:variable>
     
    	<xsl:if test="string-length(substring($string, 2)) &gt; 0">
    		<xsl:call-template name="capitalize">
    			<xsl:with-param name="string" select="substring($string, 2)" />
    			<xsl:with-param name="caps" select="$nextToCaps" />
    		</xsl:call-template>
    	</xsl:if>
    </xsl:template>
    J'ai pas compris la dernière partie "il faut que ton noeud courant...."

    Moi j'ai juste des chaines de caractère. Je cherche à voir si le caractere X est dans la chaine separator c'est tout.... Est ce que j'aurai mal compris l'emploi de contains?

  4. #4
    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 : 48
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="separator" select="abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñABCDEFGHIJKLMNOPQRSTUVWXYZ"/>
    si cela doit être une string le code c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="separator" select="'abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
    Tu as oublié des guillemets

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    j'ai modifié ce que tu m'as dit mais, rien a faire, la totalité de ma phrase reste en majuscule... Finalement, je hais le XSL lol... Une autre idée peut être??? je sèche complet sur le coup la...


    [edit] Pour ceux que ca interesse, je joint le code. En fait le problème venait du passage de booleen apparemment. Ca marche mieux en utilisant des chaines ^^

    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
    <xsl:template name="capitalize">
    	<xsl:param name="string"/>
    	<xsl:param name="caps" select=" '0' "/>
    	<xsl:variable name="separator" select="'abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
     
    	<xsl:if test="$caps = '1' ">
    		<xsl:value-of select="translate(substring($string, 1,1), 'abcdefghijklmnopqrstuvwxyzàâäãéèêëìïîòôöõùûüñ','ABCDEFGHIJKLMNOPQRSTUVWXYZAAAAEEEEIIIOOOOUUUN')" />
    	</xsl:if>
    	<xsl:if test="$caps = '0' ">
    		<xsl:value-of select="translate(substring($string, 1,1), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') " />
    	</xsl:if>	
     
    	<xsl:variable name="nextToCaps">
    		<xsl:if test="contains($separator, substring($string, 1,1))">
    			<xsl:value-of select=" '0' " />
    		</xsl:if>
    		<xsl:if test="not( contains($separator, substring($string, 1,1)) )">
    			<xsl:value-of select=" '1' " />
    		</xsl:if>
    	</xsl:variable>
     
    	<xsl:if test="string-length(substring($string, 2)) &gt; 0">
    		<xsl:call-template name="capitalize">
    			<xsl:with-param name="string" select="substring($string, 2)" />
    			<xsl:with-param name="caps" select="$nextToCaps" />
    		</xsl:call-template>
    	</xsl:if>
    </xsl:template>

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

Discussions similaires

  1. Problème avec la fonction : CONTAINS
    Par kmdkaci dans le forum SQL
    Réponses: 6
    Dernier message: 01/06/2011, 15h49
  2. problème avec la fonction contains()
    Par vhenin dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 31/08/2010, 17h26
  3. [XSLT] Probléme avec contains
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/11/2007, 01h37
  4. [XSLT]Probléme avec une fonction php dans un fichier xsl!
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/10/2007, 08h32
  5. [xslt]Problème avec la fonction name()
    Par djangers dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 14/11/2005, 18h11

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