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

XML/XSL et SOAP Discussion :

récupération du maximum


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 18
    Points : 20
    Points
    20
    Par défaut récupération du maximum
    Bonjour,

    je dispose d'une arborescence xml du type suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <element>
      <valeur>15</valeur>
      <valeur>7</valeur>
      <valeur>12</valeur>
      <valeur>21</valeur>
      <valeur>5</valeur>
    </element>
    j'aurais voulu savoir si il existe un XPath (comme count(), position()...) qui permette de récupérer la valeur maximal contenu par les balises <valeur> ?

    merci par avance pour l'aide que vous pourrez m'apporter

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    non ca n'existe pas

    tu veux faire quoi avec cette valeur ensuite ...?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Une idée à tester :

    <xsl:for-each select="/element/valeur">
    <xsl:sort order="ascending" data-type="number" />
    <!-- le premier noeud est le max -->
    </xsl:for-each>

    Je ne peux pas tester ceci mais ca devrait marcher non ?

    Haaz
    Le problème se situe souvent entre la chaise et l'écran.

  4. #4
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    Je ne peux pas tester ceci mais ca devrait marcher non ?
    oui en mettant descending à la place c'est effectivement la bonne solution... car en utilisant la fonction sort, la recherche du max est en temps
    logarithmique.

    voici la solution complète

    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
    	<xsl:template match="element">
    		<xsl:call-template name="max">
    			<xsl:with-param name="node" select="valeur"/>
    		</xsl:call-template>
    	</xsl:template>
     
    	<xsl:template name="max">
    		<xsl:param name="node"/>
    		<xsl:for-each select="$node">
    			<xsl:sort data-type="number" order="descending"/>
    			<xsl:if test="position() = 1">
    				<xsl:value-of select="number(.)"/>
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:template>
    le seul problème est qu'une fois le max trouvé, il faut parcourir tous les noeuds jusqu'à la fin, ce qui n'est pas très optimal... (l'algo est en O(n.log2(n) au lieu de O(log2(n)), pas cool)

    Je ne sais pas si quelqu'un connait une autre solution...
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  5. #5
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    quelqu'un a t-il déjà codé un template pour la recherche dichotomique?
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Merci pour la correction

    Non désolé jamais eu ce besoin... dsl

    Haaz
    Le problème se situe souvent entre la chaise et l'écran.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    bonjour,

    je vous remercie tous pour vos informations, j'ai essayé la methode de gregory et cela fonctionne bien.

    question performance, je n'ai pas pas trop de valeurs classées comme je vous l'ai montré donc les pertes sont minimes.

    quand à répondre à ta question mathix cette valeur doit me servir de 100% dans la mise en place d'un graphe

    merci encore à tous.


Discussions similaires

  1. Réponses: 4
    Dernier message: 27/10/2014, 11h55
  2. Réponses: 2
    Dernier message: 10/06/2009, 10h59
  3. Pb de récupération du maximum du numéro
    Par Lolie11 dans le forum Administration
    Réponses: 5
    Dernier message: 23/05/2007, 09h38
  4. récupération d'images
    Par MANU_2 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/08/2002, 18h36
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

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