Bonjour,
Le jeudi 16 décembre 2004 à 10:42 +0100, Oscar NIYONKURU a écrit :
> J'ai une feuille de style j'ai 5 normalisations à mettre en place:
>
> 1. La transformation des miniscules en majuscules sans accents
> 2. La transformation des miniscules en majuscules avec accents
> 3. La suppression des caractères parasites
> 4. Le remplacement de l'espace par un tiret
> 5. La concaténation
>
> Dans ma feuille de style j'ai donc mis en place 5 fonctions:
>
> - translate(ch1,ch2):transformation des miniscules en majuscules sans
> accents
> - translate(ch1,ch2):transformation des miniscules en majuscules en
> tenant compte des accents
> - translate(normalize-space(arguments),chaine)::remplacement avec
> suppression de
> caractères superflus
> - concat(ch1,ch2):concaténation
> - substring(ch,indice1,indice2):extraction
>
> Le problème est que je suis obligé d'appeler chaque fois une de ces
> fonctions chaque fois qu'il y a une règle de normalisation à appliquer
> (ex:transformation des miniscules en majuscules sans accents,
> remplacement de l'espace par un tiret) ce qui fait que j'ai à certains
> endroits (à l'intérieur d'un même élement!!!!) une fonction utilisée
> plusieurs fois (bien sûr avec des arguments différents).
>
> Questions:
>
> 1. Pour éviter d'appeler chaque fois ces fonctions à plusieurs
> endroits, est-ce que vous savez s'il
> existe un moyen de déclarer des fonctions personnalisées que
> j'appelerai par exemple UPPER
> ( qui transformerait des miniscules en majuscules) ou une
> fonction concatener() (pour la
> concaténation), etc..et que je pourrai appeler chaque fois???
En XSLT 1.0, il n'est pas possible de définir des fonctions mais
uniquement des templates nommés (très lourds à appeler). Ce sera
possible en XSLT 2.0 (qui n'est pas encore une recommandation W3C).
> 2. Si oui comment je pourrai l'implémenter?
>
> 3. Je cherche à faire une transformation équivalente à celle de la
> fonction SQL decode d'ORACLE .
> Pour information je donne à ceux qui ne connaissent pas ORACLE cet
> exemple:
>
> SELECT job, sal,
> DECODE(job,'ANALYST', SAL*1.1,
> 'CLERK', SAL*1.15,
> 'MANAGER', SAL*1.20,
> SAL)
> REVISED_SALARY
> FROM emp;
> Cette fonction est équivalente à:
>
> if job='ANALYST' then REVISED_SALARY=SAL*1.1;
> ELSIF job = 'CLERK' THEN revised_salary = sal * 1,15 ;
> ELSIF job = 'MANAGER' THEN revised_salary = sal * 1,20 ;
> ELSE revised_sal = sal ;
>
>
> Je cherche une fonction qui me permettrait de faire une opération de
> ce gerne sans passer par les tests <xsl:when test="val1">, etc...
Pourquoi pas en passant par des templates ?
<xsl:apply-templates select="." mode="revised_salary"/>
.../...
<xsl:template match="*[job='ANALYST']" mode="revised_salary">
<xsl:value-of select="sal * 1.1"/>
</xsl:template>
<xsl:template match="*[job='CLERK']" mode="revised_salary">
<xsl:value-of select="sal * 1.15"/>
</xsl:template>
...
Cordialement,
Eric van der Vlist
--
Carnet web :
http://eric.van-der-vlist.com/blog?t=category&a=Fran%C3%A7ais
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
--
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)
Received on Thu Dec 16 10:54:04 2004