From: Verachten Bruno (Bruno.Verachten@atosorigin.com)
Date: 15/11/2002 - 09:02
Bonjour,
je n'arrive toujours pas à me dépétrer de mon soucis d'algo.
Merci à Cyril Jandia pour son algorithme de remplacement, mais je
ne m'en sors pas non plus...
[De manière tout aussi informelle, il y a peut être plus simple :
"quand on rencontre une majuscule, on écrit un '_', on la passe en minuscule
*ainsi que* la suivante (sans test), et on continue avec cette dernière"]
>j'essaye d'appliquer une nomenclature sur l'écriture de certaines
>valeurs d'attributs de la sorte: toutes les lettres passent en
>minuscule,
>et quand on rencontre une majuscule, on écrit un "_", et on continue.
>Quand on rencontre deux majuscules de suite, on les passe en minuscule,
>sans mettre de "_".
>
>J'ai donc écrit ce template:
> <xsl:template name="convert3">
> <xsl:param name="text"/>
> <xsl:param name="preceding-char-already-uppercase"
>select="false()"/>
> <xsl:if test="string-length($text) > 0">
> <xsl:variable name="low">
> <xsl:value-of select="translate(substring($text,1,1),
>$xsltsl-str-upper, $xsltsl-str-lower)"/>
> </xsl:variable>
> <xsl:variable name="char-is-uppercased"
>select="boolean(not($low=substring($text,1,1)))"/>
> <xsl:message>
> <xsl:value-of select="substring($text,1,1)"/>
> <xsl:text>:</xsl:text>
> <xsl:value-of select="$low"/>
> <xsl:text>=></xsl:text>
> <xsl:value-of select="$char-is-uppercased"/>
> <xsl:text>+</xsl:text>
> <xsl:value-of select="$preceding-char-already-uppercase"/>
> <xsl:text>=</xsl:text>
> <xsl:value-of select="$char-is-uppercased and
>(not($preceding-char-already-uppercase))"/>
> </xsl:message>
> <xsl:choose>
> <xsl:when test="$char-is-uppercased and
>(not($preceding-char-already-uppercase))">
> <xsl:text>_</xsl:text>
> <xsl:value-of select="$low"/>
> </xsl:when>
> <xsl:otherwise>
> <!--xsl:value-of select="substring($text,1,1)"/-->
> <xsl:value-of select="translate(substring($text,1,1),
>$xsltsl-str-upper, $xsltsl-str-lower)"/>
> </xsl:otherwise>
> </xsl:choose>
> <xsl:call-template name="convert3">
> <xsl:with-param name="text">
> <xsl:value-of select="substring($text,2)"/>
> </xsl:with-param>
> <xsl:with-param name="preceding-char-already-uppercase">
> <xsl:value-of select="$char-is-uppercased"/>
> </xsl:with-param>
> </xsl:call-template>
> </xsl:if>
> </xsl:template>
>
>Malheureusement, pour startDAte par exemple, je n'obtiens pas
>start_date comme prévu, mais startdate...
>Voici la trace:
>s:s=>false+false=false
>t:t=>false+false=false
>a:a=>false+false=false
>r:r=>false+false=false
>t:t=>false+false=false
>D:d=>true+false=false
>A:a=>true+true=false
>t:t=>false+true=false
>e:e=>false+false=false
>startdate
>
>Je ne vois pas où j'ai "fauté". Quelqu'un peut-il m'en dire plus?
>
Merci.
Bruno Verachten.
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|