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 :

Nombre d'éléments ayant une valeur différente pour un attribut. [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Nombre d'éléments ayant une valeur différente pour un attribut.
    Bonjour à tous,

    après une recherche sur le forum je n'ai aps trouvé de réponse à ma question alors je la pose ici :

    J'ai un document xml du type :

    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
     
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <articles>
        <article articleNumber="1">
            <field key="gamme" value="blabla1"/>
        </article>
        <article articleNumber="2">
            <field key="gamme" value="blabla2"/>
        </article>
        <article articleNumber="3">
            <field key="gamme" value="blabla2"/>
        </article>
        <article articleNumber="4">
            <field key="gamme" value="blabla3"/>
        </article>
        <article articleNumber="5">
            <field key="gamme" value="blabla3"/>
        </article>
    </articles>

    Et je cherche simplement à retourner dans une variable le nombre de gammes différentes : ici 3. Seulement avec la non possibilité de réaffecter des valeurs aux variables je ne sais pas comment faire lors du parcours de mes articles avec un for-each.

    Merci par avance


    EDIT : Je ne connais pas à l'avance les différentes gammes

  2. #2
    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
    En XSLT 1.0 il n'y a pas de manière claire et directe.

    Mais on peut facilement trouver un moyen détourné :

    "Nombre d'éléments pour lesquels il n'y a pas d'élément précédent ayant la même valeur" et le tour est joué.

    Prenons un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <cartes>
      <carte>pique</carte>
      <carte>pique</carte>
      <carte>coeur</carte>
      <carte>pique</carte>
      <carte>coeur</carte>
      <carte>carreau</carte>
    </cartes>
    Imaginons qu'on veut compter tous les types différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="nb-differents" select="count(//carte[not(preceding-sibling::carte = .)])" />
    Cet exemple put facilement s'adapter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ta réponse rapide.

    Du coup pour mon cas vu que les siblings se trouvent dans d'autres élements j'ai du remplacer la fonction par preceding au final j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:variable name="count_gammes" select="count(//article/field[@key='gamme']/@value[not(preceding::article/field[@key='gamme']/@value= .)])"/>

    Encore merci beaucoup

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Toujours sur le même sujet, cette fois-ci je suis donc au courant qu'il existe 3 types de gammes et j'aimerai récupérer les intitulés de ces gammes dans 3 variables différentes.

    Je me doute qu'il faut encore utiliser preceding mais je ne comprend pas bien la syntaxe à employer pour récupérer ce que je souhaite.

    Merci d'avance

  5. #5
    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
    Je suis pas sûr de comprendre. Tu sais qu'il y a trois intitulés différents, mais mélangés, et tu veux avoir trois variables var1, var2 et var3 qui contiennent à elles trois les trois intitulés différents, c'est ça ?

    Il suffit de mettre le premier intitulé que tu trouves dans var1.

    Puis dans var2 le premier qui n'est pas égal à var1.

    Et ainsi de suite.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Oui c'est exactement ça que je cherche en algo. Mais je n'y arrive pas en xsl.

    Sur d'autres langages un if dans une boucle aurait suffit mais là je suis perdu je ne sais pas quoi utiliser comme fonction.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Ok j'ai trouvé en fait c'était assez simple ... je m'en veux d'avoir perdu du temps là dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:variable name="var1" select="cartes/carte[not(preceding-sibling::carte = .)][1]"/>
    <xsl:variable name="var2" select="cartes/carte[not(preceding-sibling::carte = .)][2]"/>
    <xsl:variable name="var3" select="cartes/carte[not(preceding-sibling::carte = .)][3]"/>

  8. #8
    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
    Ça marche, oui. Mais voici ce que moi j'avais en tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="var1" select="cartes/carte[1]"/>
    <xsl:variable name="var2" select="cartes/carte[. != $var1][1]"/>
    <xsl:variable name="var3" select="cartes/carte[. != $var1 and . != $var2)][1]"/>
    C'est important le [1] à la fin, sinon dans var1 tu te retrouves à sélectionner toutes les cartes, alors qu'on veut que la première, et ainsi de suite.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Il manque une parenthèse sur ta 3eme variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:variable name="var3" select="cartes/carte[(. != $var1 and . != $var2)][1]"/>
    Suivant la structure des cartes cette solution fonctionne mais avec ma structure xml jen 'arrive pas à faire le lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:variable name="var1" select="articles/article/field[@key='gamme']/@value[1]"/>
    <xsl:variable name="var2" select="articles/article/field[@key='gamme']/@value[. != $var1][1]"/>
    <text><xsl:value-of select="$var2"/></text>
    var1 et var2 me renvoient tout les deux la même chose

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    En fait, quand je demande les valeurs de var1[1] var1[2] .... et var2[1] ... les valeurs sont les même que les gammes des articles 1 2 3 .... je suis perdu dans mon XPATH

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

Discussions similaires

  1. Afficher une valeur différente de l'attribut "value" pour un bouton de type submit
    Par verbose dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 07/11/2019, 10h03
  2. nombre de pixel ayant une valeur donnée
    Par Imène_23 dans le forum Images
    Réponses: 3
    Dernier message: 13/03/2013, 20h57
  3. Paramètre ayant une valeur différente dans un état
    Par lozeba dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 26/04/2010, 14h34
  4. Réponses: 3
    Dernier message: 10/10/2008, 21h27
  5. [XSLT][XPATH] Nombre d'élèment ayant pour nom..
    Par SONY30 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 26/04/2007, 13h49

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