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 :

Tous les noms de noeuds distincts à partir d'un noeud [XPATH 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
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut Tous les noms de noeuds distincts à partir d'un noeud
    Bonjour,

    Je souhaite obtenir, par une requête XPATH, tous les noms distincts de noeuds à partir d'un noeud racine et directement en-dessous de ce noeud racine.
    J'expose ci-dessous le bout de XML sur lequel je travaille :
    <positions>
    <C>Toto</C>
    <A>Toto</A>
    <Z>Toto</Z>
    <A>Toto</A>
    <D>Toto</D>
    <D>Toto</D>
    <A>Toto</A>
    <B>Toto</B>
    <C>Toto</C>
    </positions>

    J'ai volontairement mis 'Toto' comme contenu de tous les noeuds car ce contenu n'est pas important. Le résultat que je souhaite obtenir est le suivant :
    C
    A
    Z
    D
    B

    Malgré plusieurs essais et recherches Google, je n'ai pas trouver de solution qui répondent à mes attentes. Je pensais que celle-ci fonctionnerait mais ce n'est pas le cas :
    distinct-values(//positions/*/name(.))

    Merci d'avance de toute aide que vous pourriez m'apporter.

    Cordialement,

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je pensais que celle-ci fonctionnerait mais ce n'est pas le cas :
    distinct-values(//positions/*/name(.))
    L'expression devrait macher comme telle. Je prefère une petite variation sans toutefois changer le résultat: à chacun son goût. Le problème, si il y en a, est probablement la façon de démontrer. On peut le faire comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:output method="text" omit-xml-declaration="yes" encoding="utf-8" />
    <xsl:template match="/">
        <xsl:for-each select="distinct-values(positions/*/name())">
            <xsl:value-of select="." />
            <xsl:text>&#x0d;&#x0a;</xsl:text>
        </xsl:for-each>
    </xsl:template>

  3. #3
    Membre Expert
    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
    Par défaut
    La fonction distinct-values n'est disponible qu'en XPath (et XSL) 2.0.

    Si tu es en XSL 1.0, il te faut passer par la méthode de Muench (en tout cas c'est le plus rapide à mettre en oeuvre).

    Je te laisse chercher par toi-même ce qu'est cette méthode (plusieurs posts en parle sur ce forum et tu dois avoir d'autres exemples sur le net) mais en gros ça consiste à utiliser une clef (xsl:key) conjointement à la fonction generate-id.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut
    En effet, je tentais d'utiliser le distinct-values dans un contexte XPATH 1.0...
    Du coup en passant en XPATH 2.0, j'ai obtenu la liste souhaitée.

    Merci pour vos conseils

    @ bientôt

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2007, 12h53
  2. [DB2]Obtenir tous les noms des champs d'une table
    Par ptr83 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/11/2006, 09h31
  3. Récupération de tous les noms de tables d'une bdd paradox
    Par izidor dans le forum Bases de données
    Réponses: 6
    Dernier message: 23/02/2006, 17h41
  4. [XSLT] comment afficher tous les noms de balises
    Par stanilas dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/11/2005, 22h24
  5. Récupérer tous les champs avec un DISTINCT
    Par Le Mérovingien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/11/2005, 23h58

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