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

XSL/XSLT/XPATH XML Discussion :

[XSLT] comment faire une sum(1 div @attribute)?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [XSLT] comment faire une sum(1 div @attribute)?
    voilà le contexte : j'ai un xml comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <testResults version="1.1">
    	<sampleResult time="500" label="bla"/>
    	<sampleResult time="565" label="bla"/>
    	<sampleResult time="420" label="bli"/>
    	<sampleResult time="594" label="bli"/>
    	<!--...-->
    </testResults>
    je cherche à calculer la somme des 1/time (en regroupant par label)

    je tente cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="averageThroughput" select="sum( 1 div (../sampleResult[@label = current()/@label]/@time))"/>
    lorsque je calcule simplement la somme des "time" (sans le 1 div devant...), ça marche très bien.

    je comprends bien que le fait de faire une opération dans le sum fait sortir de la logique des noeuds, mais je n'arrive pas à trouver la bonne manière de faire le calcul...

    merci de votre aide !!

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !


    pourrais-tu décrire le comportement qu'à ce code XSLT ? tu indiques qu'il n'est pas valide, mais as-tu une erreur ? ou autre ?

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    dans xmlspy, ça passe, mais le résultat est faux, et avec un autre interpréteur, ça plante direct : "Error! Impossible de convertir #NUMBER en fonction NodeList !"

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    OK, je pense que dans ce cas, c'est un template récursif qu'il va te falloir faire...

    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <xsl:template name="sum_inverse">
       <xsl:param name="list_nodes"/>
       <xsl:param name="sub_result"/>
       <xsl:param name="pos"/>
       <xsl:choose>
          <xsl:when test="not(count($list_nodes) = $pos)">
             <xsl:call-template name="sum_inverse">
                <xsl:with-param name="list_nodes" select="$list_nodes"/>
                <xsl:with-param name="sub_result" select="$sub_result + (1 div $list_nodes[$pos])"/>
                <xsl:with-param name="pos" select="$pos + 1"/>
             </xsl:call-template>
         </xsl:when>
         <xsl:otherwise>
             <xsl:value-of select="$sub_result"/>
         </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    Ce n'est qu'un exemple bien sûr... mais je ne vois pas vraiment comment faire d'autre à vrai dire

    pour l'explication du squelette du code, je te renvoie à la : Comment effectuer l'équivalent d'une boucle avec compteur en XSLT ?

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    merci bcp !!

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

Discussions similaires

  1. Comment faire une rotation d'un div
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/06/2009, 18h04
  2. Réponses: 1
    Dernier message: 24/11/2008, 14h38
  3. [XSLT]Comment faire une rupture ?
    Par domiq44 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 03/09/2007, 11h40
  4. [SimpleXML] comment faire une requête basée sur un namespace d'un attribut ?
    Par hansaplast dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/09/2007, 01h18
  5. [XSLT] Comment attribuer une valeur à un attribut?
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/10/2006, 15h12

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