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 :

Compter dans noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 207
    Points : 51
    Points
    51
    Par défaut Compter dans noeud
    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
    18
    19
    20
    21
    22
    23
     
    <root>
    <abo num="5242">
    <Contrats>
    <Contrat numctr="23" datedeb="2012-11-28" datefin="2013-11-28" soc="PP" titre="01" edition="REP" codoff="1PO" optoff="1" pdf="1">
    </Contrat>
    <Contrat numctr="24" datedeb="2012-11-28" datefin="2013-11-28" soc="PP" titre="01" edition="REP" codoff="1PO" optoff="1" pdf="1">
    </Contrat>
    </Contrats>
    </abo>
    <abo num="5242">
    <Contrats>
    <Contrat numctr="24" datedeb="2012-11-28" datefin="2013-11-28" soc="PP" titre="01" edition="ECL" codoff="1PO" optoff="1" pdf="1">
    </Contrat>
    </Contrats>
    </abo>
    <abo num="478">
    <Contrats>
    <Contrat numctr="23" datedeb="2012-11-28" datefin="2013-11-28" soc="PP" titre="01" edition="REP" codoff="1PO" optoff="1" pdf="1">
    </Contrat>
    </Contrats>
    </abo>
    </root>
    bonjour ci joint un xml en exemple

    je voudrais compter via un xsl
    le nombre d'abonnés par edition ECL ou REP

    dans l'exemple ci dessus 2 abonnés REP et 1 abonné ECL

    merci

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous pouvez faire quelque peu comme ça avec certaine technique qui peut être utile en général.
    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 match="root">
        <resultat>
            <xsl:call-template name="compter">
                <xsl:with-param name="ed" select="'REP'" />
            </xsl:call-template>
            <xsl:call-template name="compter">
                <xsl:with-param name="ed" select="'ECL'" />
            </xsl:call-template>
        </resultat>
    </xsl:template>
     
    <xsl:template name="compter">	
        <xsl:param name="ed" />
        <compte edition="{$ed}">
            <xsl:value-of select="count(abo/Contrats/Contrat[@edition=$ed])" />
        </compte>
    </xsl:template>
    Il va donner 3 et 1. Si vous entendez dire abo num="5242" seulement, vous change la ligne correspondante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            <xsl:value-of select="count(abo[@num='5242']/Contrats/Contrat[@edition=$ed])" />
    Mais ça devient moins général et asymétrique: vous pouvez le modifier mettant @num passé comme un paramètre de plus que seulement ed...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 207
    Points : 51
    Points
    51
    Par défaut
    oui mais moi mon resultat doit etre 2 abonnés REP et 1 Ecl

    En faite je ne dois pas tenir compte du nombre de contrats par abonnés

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Dans ce cas il faut compter le nombre de <abo> qui contiennent un abonnement à l'édition en question.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(abo[conditionQuiVerifieSilEstAbonné])
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 207
    Points : 51
    Points
    51
    Par défaut
    Oui mais justement si //abo il y a un abonné je n'ai pas de condition.
    c'est juste que je veux compter le nombre de //abo pour l'edition REP et pour l'edition ECL

    sinon je peux le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(/Root/Abo/Contrats/Contrat[@edition='REP'])"

    mais quand il y a deux contrat cela me compte deux abonnés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 207
    Points : 51
    Points
    51
    Par défaut
    ok j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(/Root/Abo/[.//Contrat@edition='REP'])"

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/10/2006, 12h39
  2. Compter dans une requête Analyse Croisée
    Par jeanchcom dans le forum Access
    Réponses: 14
    Dernier message: 26/09/2006, 08h14
  3. [Tableaux] Compter dans un tableau
    Par CAMB3L dans le forum Langage
    Réponses: 3
    Dernier message: 29/04/2006, 18h23
  4. Compter dans une table
    Par pmithrandir dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 09h08
  5. [XSL][Noob]Compter des noeuds de meme valeur??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/07/2005, 10h07

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