IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

Pd de transformation XML/XSL sur un windows 2000 server US


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 92
    Points : 55
    Points
    55
    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 ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 85
    Points : 99
    Points
    99
    Par défaut
    Sylvain, au pire, tu peux tester ta remise en tant que chaine de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="REMISE != '0'">
      Affichage de la ligne de remise
    </xsl:if>
    Julien C.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 92
    Points : 55
    Points
    55
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2010, 17h34
  2. transformation xml --> xsl --> xml
    Par Invité dans le forum Eclipse PHP
    Réponses: 0
    Dernier message: 03/02/2009, 16h15
  3. transformation xml+xsl dans un string et non un fichier
    Par le_chomeur dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/02/2008, 15h14
  4. [ajax] Problème transformation XML/XSL
    Par LoK dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/08/2006, 18h15
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo