From: Jandia Cyril (cjandia@logfi.fr)
Date: 01/03/2002 - 13:44
> De : Pierre-Adrien Coustillas
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] substring et template
>
> j'utilise un template dans le but de fomater une date. J'ai donc ceci :
> <xsl:call-template name="aaaammjj">
> <xsl:with-param name="date">
> 3000-05-18
> </xsl:with-param>
> </xsl:call-template>
>
> qui appelle cela :
> <xsl:template name="aaaammjj">
> <xsl:param name="date">20000101</xsl:param>
>
> <fo:block>
> <xsl:value-of select="$date" /> 
> <xsl:value-of select="substring($date,0,11)" /> 
> </fo:block>
>
> </xsl:template>
>
>
> Le résultat est :
> 3000-05-18 3
>
> Le substring m'affiche 3 (???)
> si j'essaye
> [...] et pour finir ceci
> [...] j'ai 3000-08-18 3000-08-18 3000-08-18 (???)
>
> La je cale completement est ce un GROS bug de substring utilisé
> dans un template ?
En effet, cela ressemble à un bug dans la mesure où vos appels à
substring(..., 0, ...) devraient être traités comme équivalents à
substring(..., 1, ...) (car XSLT, ou plutôt [XPath 1.0], prévoit une [rêgle
d'arrondi pour substring], vu que les valeurs chaînes de caractère ont une
première position ... **EGALE A 1**, ET **NON PAS 0** comme vos exemples le
laisse supposer ;o)
je préconiserais donc ceci :
<xsl:call-template name="aaaammjj">
<xsl:with-param name="date" select="'3000-05-18'" />
</xsl:call-template>
</xsl:template>
[...]
<xsl:template name="aaaammjj">
<xsl:param name="date" select="'2002-03-01'" />
<xsl:value-of select="$date" /> 
<xsl:value-of select="substring($date, 1, 10)" /> 
</xsl:template>
(en outre, remarquez l'usage de l'attribut select="...", je crois plus
approprié dans votre cas)
PS :
A propos, avec quel processeur XSLT avez-vous obtenu ces résultats ?
[XPath 1.0]
http://xmlfr.org/w3c/TR/xpath
[rêgle d'arrondi pour substring]
http://xmlfr.org/w3c/TR/xpath/#function-substring
Lire :
"[...] La sous-chaîne retournée contient les caractères dont la position est
plus grande ou égale à la valeur arrondie du 2ième argument et, si le
troisième argument est spécifié, inférieur à la somme de la valeur arrondie
des 2ième et 3ième arguments; les comparaisons et l'addition utilisée
ci-dessus doivent suivre le standard IEEE 754 rules; l'arrondi est calculé
comme avec la fonction round. [...]"
Cordialement,
Cyril Jandia
--
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
|