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] Connaître le nombre de noeuds renvoyés


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Par défaut [XSLT] Connaître le nombre de noeuds renvoyés
    Hello,

    J'aimerais savoir combien de noeud(s) ont été matché(s) par mon template, ou même par un foreach si c'est possible.

    Etant donné qu'il n'est pas possible d'incrémenter de variable, je n'ai pas d'idée.

    Y'a t-il une fonction en XSLT qui permet de le savoir ?
    Le cas échéant, une fonction DOM ? Mais je n'étais pas parti avec DOM donc ce serait cool s'il y avait une fonction XSL "classique".

    Merci d'avance !

  2. #2
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    en XPATH, la fonction count( node set ) te renvoit le nombre de noeud.
    Dans une variable cela peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="var_pipo" select="count(noeuds[attribut='valeur'])" />
    A voir: http://xmlfr.org/w3c/TR/xpath

  3. #3
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    il est moins coûteux en termes de ressources d'utiliser la fonction XPath last(), qui renvoie l'index du dernier noeud dans la liste contextuelle (et en conséquence la taille de cette liste) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="mon-element">
      <xsl:variable name="nb_noeuds" select="last()"/>
      ...
    </xsl:template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="mon-element">
      <xsl:variable name="nb_noeuds" select="last()"/>
      ...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Par défaut
    GrandFather, le pb c'est qu'avec ça j'aurais la variable dans le for-each, et j'en ai besoin en dehors du for-each. Je ne sais donc pas comment faire pour la récupérer dans ce cas (c'est d'ailleurs le sujet d'un de mes autres posts...8))

    neilbgr Quelle la différence entre count() et <xsl:number count=""> ?

    J'utilise cette dernière fonction d'habitude même si je ne trouve pas ça toujours très pratique...

    Merci

  5. #5
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Définition de <xsl:number count="" /> : http://xmlfr.org/w3c/TR/xslt/#number
    (Rem: c'est du XSLT)

    Définition de count() : http://xmlfr.org/w3c/TR/xpath#function-count
    "La fonction count retourne le nombre de noeuds de l'ensemble de noeuds passé en argument."
    (Rem: c'est du XPath)

  6. #6
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Par défaut
    Je me suis débrouillé pour que ça marche avec un xsl:number, en fait j'ai matché plus haut, compté les tr, puis fais un foreach pour redescendre dans l'arborescence, tout simplement si on peut dire mais c'était pas très naturel dès le début...

    Le résultat, c'est un code qui ne ressemble pas du tout à ce que j'avais imaginé au départ, mais qui marche quand même, donc on va pas faire la fine bouche...

    En tout cas merci à vous!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2007, 03h51
  2. [XSLT 2.0]Calculer le nombre de noeuds max contenu par un fragment-node
    Par Louis-Guillaume Morand dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 18/03/2007, 01h10
  3. [XSLT] Nombre de noeuds enfants
    Par Oberown dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/10/2006, 16h58
  4. Limiter le nombre d'enregistrements renvoyés par un SELECT
    Par Wilco dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/11/2004, 13h47
  5. [débutant] Limitation du nombre d'enregistrement renvoyé
    Par tmcgrady dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2003, 09h41

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