On jeu, 2005-07-14 at 10:16 +0200, Patrice Harmegnies wrote:
> Tu peux mettre ton expression type string dans une variable.
> Du genre
> <xsl:variable name='test'> ton expression </xsl:variable>
>
> Et l'appeler dans ton expression ...
> Simplement avec $test,
Effectivement, et c'est un bon moyen de contourner le problème.
Il est néanmoins possible d'écrire cette expression XPath sans avoir
recours à une variable même si cela demande un peu plus de
réflexion :-) ...
Lorsque l'on écrit :
<xsl:when test="./@commune='Les roches l'eveque' or ./@commune='les roches l'eveque' or
./@commune='LES ROCHES L'EVEQUE'">
le parseur XML qui lit la transformation XSLT comme n'importe quel
document XML communique au processeur XSLT un attribut "test" ayant la
valeur suivante :
./@commune='Les roches l'eveque' or ./@commune='les roches l'eveque' or
./@commune='LES ROCHES L'EVEQUE'
Dans cette expression XPath, le caractère apostrophe est utilisé pour
délimiter les constantes de type chaîne de caractères et il ne peut donc
pas être utilisé à l'intérieur de ces constantes.
Pour résoudre ce problème, on va utiliser la possibilité d'écrire les
caractères apostrophe et/ou guillemet sous forme d'un appel à l'une des
cinq entités pré-définies en XML : "'" et/ou """.
On peut être tenté d'écrire tout simplement :
<xsl:when test="./@commune='Les roches l'eveque' or ./@commune='les roches
l'eveque' or ./@commune='LES ROCHES L'EVEQUE'">
et on s'apercevra alors que le processeur XSLT nous renvoie exactement
la même erreur.
C'est normal puisque dans ce cas, le parseur XML remplacera ' par
le caractère ' et renverra exactement la même valeur d'attribut au
processeur XSLT.
Ici, en fait ce que nous voulons, c'est que la valeur renvoyée au
processeur XSLT soit :
./@commune="Les roches l'eveque" or ./@commune="les roches l'eveque"
or ./@commune="LES ROCHES L'EVEQUE"
Pour cela, nous avons deux options.
Si nous souhaitons conserver des guillemets pour encadrer notre valeur
d'attribut, nous écrirons :
<xsl:when test="./@commune="Les roches l'eque" or
./@commune="les roches l'eveque" or
./@commune="LES ROCHES L'EVEQUE"">
Mais nous pouvons également simplifier cela et utilisant des apostrophes
pour encadrer nos valeurs d'attributs :
<xsl:when test='./@commune="Les roches l'eveque" or
./@commune="les roches l'eveque" or
./@commune="LES ROCHES L'EVEQUE"'>
Ces deux variations renvoient la même valeur d'attribut et sont donc
totalement équivalentes en XML.
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 Jul 14 15:59:34 2005