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 :

valeur d'un noeud frere égal attribut du noeud courrant [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
    Juin 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 51
    Par défaut valeur d'un noeud frere égal attribut du noeud courrant
    Bonjour,

    J'ai un fichier XML de cette 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
     
     
    <Root>
     
    <A name="lien_1">
     <Child name="a">
     <Child name="b">
     <Child name="c">
    </A>
     
    <A name="lien_2">
     <Child name="d">
     <Child name="e">
     <Child name="f">
     <Child name="g">
     <Child name="h">
    </A>
     
    <B name="toto" link="lien_1"/>
    </Root>

    Je pars du Nœud "B" et je voudrais récupérer uniquement les éléments child contenue dans le noeud A avec l'attribut name égal à l'attribut link de mon élément B courant. Cette action est elle possible si je l'écris en dur comme ci dessous ok je récupère les bons éléments par contre impossible de mettre la valeur lien_1 en variable lu depuis l'élément B

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ../A[@name='lien_1']/Child

    Merci d'avance

  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
    Citation Envoyé par Josy Voir le message
    par contre impossible de mettre la valeur lien_1 en variable lu depuis l'élément B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="link" select="@link"/>
    ?

    Possible aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for link in @link return ../A[@name=$link]/Child
    À tester, je suis pas sûr de la syntaxe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 51
    Par défaut
    Je suis dans une expression XPath. Je ne sais pas si je peux créer un variable comme en XSL. Le but étant de l'écrire en une seule requete

  4. #4
    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
    C'est ce que fait ma deuxième solution dont, je le répète, je ne suis pas sûr de la syntaxe, mais il devrait y avoir une solution de ce genre en XPath 2.0.

    Et puis, si je te disais juste que "tu veux, tu veux," ouais sauf que c'est juste pas possible, eh ben tu serais bien avancé -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    Il faut utiliser la fonction current() : ../A[@name=current()/@link]/Child.

  6. #6
    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
    Citation Envoyé par Loceka Voir le message
    Il faut utiliser la fonction current() : ../A[@name=current()/@link]/Child.
    Je me méfie de l'emploi de current() quand on me dit que ça doit être fait en une seule requête. Si c'est vrai, on est probablement dans un contexte où current() n'est pas une fonction définie.

    (Et si c'est faux, alors je me méfie de current() parce qu'il est moins clair qu'une bonne variable toute simple.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    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
    Ben current() ça correspond à l'élément actuel, quelque soit le contexte.

    Enfin je sais pas, moi je l'utilise quand j'en ai besoin, j'ai jamais eu de problème avec.

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

Discussions similaires

  1. Récupérer valeur d'un attribut de noeud XML compressé
    Par mixka13 dans le forum XNA/Monogame
    Réponses: 5
    Dernier message: 28/07/2012, 23h22
  2. xml renvoi de la valeur du noeud depuis l'attribut
    Par chacalbobo dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 26/05/2010, 12h19
  3. [Xpath] Sélection des noeuds dont un attribut
    Par toxine dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/01/2007, 14h22
  4. Réponses: 6
    Dernier message: 06/03/2006, 13h38
  5. [XPATH] Nombres de noeuds freres ?
    Par DemonKN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/02/2005, 12h29

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