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 :

Noeuds successifs ayant un fils avec un attribut d'une valeur donnée [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut Noeuds successifs ayant un fils avec un attribut d'une valeur donnée
    Bonjour,

    J'ai un document de la forme:
    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
    <doc>
       <part>
          ...
          <tag k='cible' v='0'/>
       </part>
       <part>
          ...
          <tag k='cible' v='0'/>
       </part>
       <part>
          ...
          <tag k='cible' v='1'/>
       </part>
       <part>
          ...
          <tag k='cible' v='1'/>
       </part>
       <part>
          ...
          <tag k='cible' v='0'/>
       </part>
    </doc>
    J'aimerais sélectionner les noeuds successifs pour lesquels k='cible' et ayant la même valeur de v.

    Ici j'obtiendrais 3 groupes :
    - le premier contenant les deux premiers noeuds part car étant successifs avec la même valeur de v pour k='cible' (0)
    - le deuxième contenant les noeuds part 3 et 4 car étant successifs avec la même valeur de v pour k='cible' (1)
    - le troisième contenant le dernier noeud part où v='0' pour k='cible', mais qui ne doit pas se trouver dans le premier groupe car il n'est pas successif directement à ceux du premier groupe

    Pour le moment, j'arrive à sélectionner les différentes valeurs de v quand k='cible' avec :

    ... mais ce ne répond pas à ma requête initiale. Cependant j'imagine qu'il doit là aussi falloir se servir de preceding.
    //part/tag[@k='cible' and not( preceding::part/tag/@v = @v )]


    Toute idée est la bienvenue,

    Merci !

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    XPath seul ne sépare pas en groupe. Jamais, d'aucune manière, en aucune circonstance. Son modèle de données, par définition, en est incapable, sans aucune remise en question possible.

    Si c'est pour utiliser dans une feuille de style XSLT 2.0, par contre, c'est assez simple. Il suffit d'utiliser for-each-group.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:for-each-group select="part" group-adjacent="tag[@k='cible']/@v">
      <xsl:value-of select="concat('Groupe ', current-grouping-key())"/>
      <xsl:for-each select="current-group()">
        <!-- Faire quelque chose avec le part -->
      </xsl:for-each>
    </xsl:for-each-group>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Bonjour Thelvin,

    Merci beaucoup de ta réponse, c'est exactement ce qu'il me fallait !
    L'expression XPath était effectivement à intégrer dans une feuille XSLT, c'est donc d'autant plus parfait !

    J'ai rajouté une info conditionnelle au cas où part n'ait pas de noeud fils tag avec k='cible'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(count(tag[@k='level'])=0) 
       then maValeurParDefaut 
       else tag[@k='level']/@v

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

Discussions similaires

  1. [Débutant] Appli avec attribution d'une valeur dans un label
    Par outofspace dans le forum Développement iOS
    Réponses: 3
    Dernier message: 16/09/2014, 22h54
  2. Question convention avec les attributs d'une classe
    Par pierrehs dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2011, 14h55
  3. [XSD] Element avec un attribut et une valeur
    Par RamyBoulet dans le forum Valider
    Réponses: 1
    Dernier message: 01/09/2010, 10h11
  4. [XPath] recherche d'un node avec un attribut d'une valeur précise
    Par jerome.fortias dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/09/2007, 17h13
  5. Réponses: 4
    Dernier message: 12/10/2005, 13h13

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