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 :

Transformation chaine de caractere en XSLT


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Transformation chaine de caractere en XSLT
    Bonjour,

    Je voudrais modifier une chaine de caractère dans un élément en le répétant pour chaque caractère modifié.

    par exemple, je voudrais que

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <p>bonjour</p>


    se décline de cette façons :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p>Bonjour</p>
    <p>bOnjour</p>
    <p>boNjour</p>


    etc..

    en XSLT.

  2. #2
    Membre émérite
    Je ne questionne pas le pourquoi-faire : on peut imagine qu'il y a une raison. Le raisonnement du grand élan reste toujours le même; le détail, ça dépend l'agilité et l'imagination de chacun. Je me restraints de le faire avec a-z, mais on peut facilement ajouter plus de caractères si on veut.
    Code xslt 1.0 :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
    30
    31
    32
    33
    34
    35
    <xsl:template match="p">
        <xsl:choose>
            <xsl:when test="normalize-space()!=''">
                <xsl:call-template name="proc">
                    <xsl:with-param name="nodename" select="local-name()" />
                    <xsl:with-param name="s" select="normalize-space()" />
                    <xsl:with-param name="idx" select="1" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template name="proc">
        <xsl:param name="nodename" select="'dn'" />
        <xsl:param name="s" />
        <xsl:param name="idx" select="1" />
        <xsl:element name="{$nodename}">
            <xsl:variable name="s-avant" select="substring($s, 1, number($idx)-1)" />
            <xsl:variable name="s-idx" select="translate(substring($s,$idx,1), 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
            <xsl:variable name="s-apres" select="substring($s, number($idx)+1)" />
            <xsl:value-of select="concat($s-avant, $s-idx, $s-apres)" />
        </xsl:element>
        <xsl:choose>
            <xsl:when test="$idx!=string-length($s)">
                <xsl:call-template name="proc">
                    <xsl:with-param name="nodename" select="$nodename" />
                    <xsl:with-param name="s" select="$s" />
                    <xsl:with-param name="idx" select="number($idx)+1" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise />
        </xsl:choose>
    </xsl:template>

  3. #3
    Membre à l'essai
    Un grand merci !!!
    Tout est dans la maîtrise de la chaîne de caractères !!!
    Vive les variables !!!

###raw>template_hook.ano_emploi###