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 :

Traitement différent pour premier élément d'une boucle [XPATH 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut Traitement différent pour premier élément d'une boucle
    Bonjour,

    J'ai un XML qui ressemble à peu près à ça :
    Code xml : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <Document>
      <Objets>
        <Objet>
          <Types>
            <Type>
              <Libelle>Nom</Libelle>
              <Valeur>toto</Valeur>
            </Type>
            <Type>
              <Libelle>Ordre</Libelle>
              <Valeur>3</Valeur>
            </Type>
          </Types>
        </Objet>
        <Objet>
          <Types>
            <Type>
              <Libelle>Nom</Libelle>
              <Valeur>titi</Valeur>
            </Type>
            <Type>
              <Libelle>Ordre</Libelle>
              <Valeur>2</Valeur>
            </Type>
          </Types>
        </Objet>
        <Objet>
          <Types>
            <Type>
              <Libelle>Nom</Libelle>
              <Valeur>tutu</Valeur>
            </Type>
            <Type>
              <Libelle>Ordre</Libelle>
              <Valeur>7</Valeur>
            </Type>
          </Types>
        </Objet>
        <!-- [...] -->
      </Objets>
    </Document>

    J'aimerai à l'issue d'une transformation XSLT obtenir quelque chose ce ce style :
    titi, toto, tutu
    Il s'agit des "Noms" triés selon leur "Ordre", séparés d'une virgule.

    Problème classique : je ne veux ni de virgule avant le premier élément, ni de virgule après le dernier élément.
    C'est ici que je bloque.


    Comment faire pour différencier le premier (ou le dernier) élément des autres dans une boucle (for-each) sachant qu'elle est triée (sort) ?


    Pour l'instant ma feuille XSLT ressemble à ça, mais j'ai bien sûr une virgule à la fin.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="//Objet">
        <xsl:sort select="Types/Type[Libelle= 'Ordre']/Valeur" order="ascending" data-type="number"/>
        <xsl:value-of select="Types/Type[Libelle= 'Nom']/Valeur"/>
        <xsl:text>, </xsl:text>
    </xsl:for-each>

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Fais un test sur position(), cf ce post : http://www.developpez.net/forums/d11...rs-meme-xpath/

  3. #3
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Super ça fonctionne parfaitement !

    Merci bien !


    Voici le xslt si ça peut aider quelqu'un (en plus du post auquel fait référence Loceka)
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="//Objet">
      <xsl:sort select="Types/Type[Libelle= 'Ordre']/Valeur" order="ascending" data-type="number"/>
      <xsl:if test="position() > 1">
        <xsl:text>, </xsl:text>
      </xsl:if>
      <xsl:value-of select="Types/Type[Libelle= 'Nom']/Valeur"/>
    </xsl:for-each>

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/01/2011, 22h16
  2. Styles différents pour les éléments d'une liste
    Par C_C dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 19/05/2009, 17h15
  3. Réponses: 1
    Dernier message: 21/05/2008, 20h23
  4. Sélectionner le premier élément d'une ComboBox
    Par deubal dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/11/2005, 10h32
  5. Réponses: 2
    Dernier message: 11/01/2005, 14h10

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