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 :

sum(XPATH) retourne NaN


Sujet :

XMLRAD

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 42
    Par défaut sum(XPATH) retourne NaN
    Ma base interbase contient un champ monnétaire (décimal,2) et je voudrais sortir un sous total par regrouppements (maître détail). Mais le champ monétaire est à priori converti en texte car la somme sur la grappe en utilisant sum() ne marche pas. J'ai essayé avec un champ 'entier' (année du montant) et ça marche. Il doit y avoir un pb de format de nombre.

    Mais impossible d'inserer number() dans le sum() car il ne considère pas cela comme un chemin valide.

    Du coup j'ai inséré un dbextract avec SUM SQL mais cela m'oblique à parcourir deux fois la base et allonge le process.

    Y a t il une solution pour utiliser le sum('chemin') dans XSL au vu des données ci-dessus?

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 85
    Par défaut
    Quel est le caractère utilisé pour séparer tes décimals ? une "," ou un "." ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 42
    Par défaut
    virgule !

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Par défaut XPath et calcul
    la fonction sum() de XPath attend un node-set pour pouvoir calculer la somme de tous les elements de ce node-set.
    Le float accepté par cette fonction est à séparateur . (point) et pas , (virgule).

    La fonction qui permettrait de transformer tes séparateurs , en . ne renvoie pas de node-set, d'où soucis...

    il faudrait en l'occurence chainer les trois fonctions XPath sum(number(translate(XPath, ',', '.'))), ce qui est incorrecte à cause de cette histoire de node-set. Ca ne marche donc pas

    Et tant mieux, parce que l'utilisation de ce genre de function XPath est normallement prohibée : le résultat du calcul est une donnée, et toute donnée doit se trouver auparavant dans le XML. Il faudrait donc plutôt faire le calcul soit en SQL, soit par code dans la DLL.
    Clairement, XSL n'est pas fait pour ce genre de chose : il n'est là que pour la transformation, et pas pour du calcul.

    Maintenant, si tu tiens vraiment vraiment à faire ce calcul en XSL
    Tu peux prendre un peu les devants et faire en sorte que l'élément XML contienne la valeur bien formatée :

    tu peux rajouter un Field dans ton DBExtract, dont le nom sera le nom du champ type monétaire, le type FLOAT et le formatage %.2f par exemple (même type de formatage qu'en Delphi. Fonction Format() utilisée).

    Ca te permettra d'avoir dans la grappe de données XML tes valeurs float bien formatées qui seront alors bien transtypées par sum().

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 42
    Par défaut
    Merci du conseil ! Je pensais au contraire qu'il valait mieux utiliser le plus possible XSL pour éviter les requêtes à la base.

    La solution que j'ai mise en oeuvre, fut bien sûr un DBExtract supplémentaire.

    Je n'utiliserai pas la conversion que tu préconises (float...) Car si je m'amuse à transformer mes données en monnétaire d'autres modules ne fonctionneront plus... Ce serait déshabiller Pierrette pour habiller Paulette

    En tout cas tjs aussi pédagogique le nico ! (et patient avec les lourdingues comme moi)

Discussions similaires

  1. [XPath et PHP] Ma requete ne retourne aucun noeud ?
    Par Olif_C dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 07/08/2013, 13h52
  2. Retourner SUM() et autres valeurs d'une autre requête
    Par ach152 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/11/2011, 17h50
  3. Réponses: 1
    Dernier message: 10/06/2010, 14h36
  4. deux sum dont une qui ne retourne pas d'enregsitrement
    Par francinego dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/03/2009, 19h17
  5. [XPATH] sum avec une division à l'intérieur
    Par tommey dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/08/2007, 12h44

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