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 :

[XSL] Transformation affichage d'une phrase


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Par défaut [XSL] Transformation affichage d'une phrase
    Bonjour à tous !

    Je ne sais pas si le nom de ce topic est bien clair. Cependant, je ne crois pas que le problème à résoudre soit compliqué à comprendre... Seulement, cela fait déjà quelques jours que je me heurte dessus et je ne trouve pas de solution.

    Dans mon fichier XML, j'ai une phrase du style "Voici ma phrase".

    En résultat, je dois avoir "[préfixe]VoiciMaPhrase". La gestion du préfixe est facilement résolu. Supprimer les espaces aussi, c'est assez simple (juste avec "translate"). Seulement, je ne vois pas comment séparer les espaces ET transformer la première lettre de chaque mot en majuscule.

    Au début, je pensais tester où il y a un espace dans la chaîne de caractère (il peut donc y en avoir plusieurs...), récupérer le premier bout tel qu'il est et, avant de sauver le deuxième morceau, transformer sa première lettre par une majuscule. Puis, regarder de nouveau dans le second morceau s'il y a un espace et alors recommencer l'algorithme. Et ensuite, concaténer les différents morceaux.
    Seulement, je ne vois pas comment garder en mémoire le traitement sur chaque morceau de la chaîne de caractères.

    J'espère que vous pourrez m'aider rapidement !

    (si vous avez des idées pour le titre, n'hésitez pas à m'en donner !)

    Ha ! Et j'ai fait une recherche avancée sur le forum (et sur Google aussi) en regardant dans cette partie du forum et en cherchant "espace mot" et je n'ai rien trouvé... Je m'excuse par avance si ma demande est redondante d'une autre...

  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
    Par défaut
    bon je n aie pas le temps de coder mais voici la solution pour mettre la premiere lettre en majuscule
    il suffit de faire un mix de fonctuon entre
    substring() --> qui prend une string dans une string et
    replace() --> remplacement de caractère
    voila

  3. #3
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    ce type de problème entraîne forcément une solution récursive :

    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:call-template name="collapse">
      <xsl:with-param name="phrase" select="normalize-space('voici ma phrase')"/>
    </xsl:call-template>
    [...]
    <xsl:template name="collapse">
      <xsl:param name="phrase"/>
      <xsl:variable name="restant" select="substring-after($phrase, ' ')"/>
      <xsl:choose>
        <xsl:when test="$restant != ''">
         <xsl:call-template name="collapse">
            <xsl:with-param name="phrase" select="concat(substring-before($phrase, ' '), translate(substring($restant, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring($restant, 2))"/>
         </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="concat(translate(substring($phrase, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring($phrase, 2))"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    Pas testé, donc attention aux éventuelles coquilles, mais le principe est là. Pour bien comprendre comment cela fonctionne, les valeurs successives que vont prendre les variables $phrase et $restant à chaque itération de la fonction collapse sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $phrase        | $restant 
    ---------------|----------       
    voici ma phrase| ma phrase
    voiciMa phrase | phrase
    voiciMaPhrase  |
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Par défaut
    Réponse courte, brève et efficace ! Un copier-coller, remplaçage de la chaîne de caractères servant d'exemple et hop ! Ma fonction utilisée pour suivre les règles de codage imposée fonctionnait parfaitement !

    Merci à vous deux et heureusement que ce forum efficace existe !

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

Discussions similaires

  1. Tester l'affichage d'une phrase dans une page entière
    Par Creanet dans le forum Langage
    Réponses: 1
    Dernier message: 11/10/2009, 17h56
  2. [XSL~FO] Comment couper une phrase trop longue?
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/03/2008, 15h29
  3. [xsl-fo]Affichage d'une image à partir d'un blob
    Par cradleofpain dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 18/06/2007, 17h36
  4. probleme affichage d'une phrase dans une zone de texte
    Par algod dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/05/2007, 11h14
  5. [EasyPHP] affichage d'une phrase
    Par psgman113 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 23/03/2007, 02h23

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