|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Je reviens avec mes problèmes de formatage de float et de dates, j'ai réussi à générer des float au format français en supprimant XMLC_Culture donc à la sortie de mon XMLGram j'ai bien des 0,5. Par contre dans mon XSL je fais des tests sur cette valeur :
<xsl:if test="REMISE!=0"> ... affichage de la ligne de remise </xsl:if> La machine étant US, la conversion de 0,5 ne se fait pas dans le XSL, y a t'il un moyen de faire en sorte que le XSL travaille avec des nombres au format français ? |
|
|
00
|
|
|
#2 | ||
|
Membre éclairé
![]() |
Non pas moyen à ma connaissance. XSL ne travaille qu'avec des float formatés US, donc à séparateur . (point).
Il n'est pas conseillé de faire des "traitements" avec XSL, meme s'il ne s'agit ici que d'un simple test. Il vaut mieux effectuer le traitement sur le xmlgram ou par code. Il faut commencer à ne travailler qu'avec des chaines de caracteres avec XML/XSL, sans s'occuper des types. Or pour faire une comparaison sur des float, bin là, c'est peut etre plus simple d'utiliser un petit bout de code typé. La solution à préférée à priori est la suivante : Dans le AfterInternalInstruction, on a accès par code à l'enregistrement extrait via le XMLCursor Output. A partir de là, on peut utiliser du code, des types et tout ce qu'on veut en Delphi ou dans un autre langage supporté par XMLRAD. Il faudrait alors faire le test ici, et rajouté un nouvel élément XML dans le Output qui permettra de faire le test correctement en XSL. par exemple : Code :
On quitte si on n'est pas sur la bonne XMLInstruction, ici le DBExtract nommé "Extract". On crée l'élément par défaut sur lequel on fera notre test, et on lui donne une valeur 0 (= false par convention). On récupère ensuite la valeur du champ RETURN, qu'on transforme en Float. On fait ensuite les tests sur cette valeur, et on modifie la valeur de notre élément si nécessaire. Le XSL fera ensuite un test sur cette valeur, si "IsReturn = '0'" ou si "IsReturn = '1'". Note qu'on utilise ici des ' (apostrophe), on travaille bien avec des chaines de caractères. La conclusion de tout ca : XSL n'est là que pour la transformation, il n'est pas fait pour coder un traitement ou calculer des valeurs. XPath permet de faire des sommes ou ce genre de calcul, mais une somme ou tout autre calcul, est une donnée, et toutes les données sont dans le XML ! Il faut faire tous les calculs (somme, valeur min ou max par exemple) en amont pour que la valeur soit dans le XML.
__________________
Nicolas |
||
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : janvier 2003 Messages : 85 ![]() |
Sylvain, au pire, tu peux tester ta remise en tant que chaine de caractères :
Code :
__________________
Julien C. |
||
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2002 Messages : 92 ![]() |
Non Julien car j'utilise une chaine de formatage %.2f, il faudrait que je fasse le test :
(REMISE != '0,00') or (REMISE != '0.00') En plus si je décide de changer le nombre de chiffres après la virgule ... Donc finalement j'ai codé ça directement en Delphi comme me l'a conseillé Nicolas Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com