Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2003, 12h52   #1
Nouveau Membre du Club
 
Inscription : novembre 2002
Messages : 92
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 92
Points : 25
Points : 25
Par défaut Pd de transformation XML/XSL sur un windows 2000 server US

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 ?
Sylvain Leray est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2003, 09h05   #2
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
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 :
1
2
3
4
5
6
7
8
9
10
11
procedure ...BeforeInternalInstruction(... Output: IXMLCursor);
var
  Test: Double;
begin
  if XMLInstruction.Name <> 'Extract' then
    Exit;
  Output.SetValue('IsReturn', '0');
  Test := StrToFloat(Output.Values['RETURN']);
  if Test <= 0 then
    Output.SetValue('IsReturn', '1');
end;
Et l'explication qui va avec :
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
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2003, 09h50   #3
Membre régulier
 
Inscription : janvier 2003
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 85
Points : 92
Points : 92
Sylvain, au pire, tu peux tester ta remise en tant que chaine de caractères :

Code :
1
2
3
<xsl:if test="REMISE != '0'">
  Affichage de la ligne de remise
</xsl:if>
__________________
Julien C.
Julien C. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2003, 11h00   #4
Nouveau Membre du Club
 
Inscription : novembre 2002
Messages : 92
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 92
Points : 25
Points : 25
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
Sylvain Leray est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h17.


 
 
 
 
Partenaires

Hébergement Web