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 :

différence entre des expressions XPATH


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Par défaut différence entre des expressions XPATH
    Bonjour,
    Pourriez vous m'expliquer la difference entre les expressions suivantes :
    1.
    //A[position() = 1]
    /descendant::A[position() = 1]

    pour moi: elles retournent toujours le méme résultat

    2.

    /A/B[@att1=''a1'' and position()=last]
    /A/B[@att1=''a1''] [position()=last]
    /A/B[position()=last] [@att1=''a1'']

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    On a :
    //A[position() = 1]
    qui est équivalent à
    /descendant-or-self::node()/child::A[position() = 1][/CODE]
    mais différent de
    /descendant::A[position() = 1]

    et il est tout à fait possible que tu obtienne le même résultat !
    Cela dépends bien sûr de ton XML.
    Il est clair que différentes expressions XPath peuvent sélectionner les même noeuds.

    Ensuite :

    /A/B[@att1=''a1'' and position()=last]
    est équivalent à
    /A/B[ position()=last and @att1=''a1'']
    Tu sélectionne les éléments A, fils de la racine,
    puis tu récupère tous les fils B des noeuds A
    enfin tu prends que le dernier fils B s'il a un attribut att1 dont la valeur est a1.

    /A/B[@att1=''a1''] [position()=last]
    Tu sélectionne les éléments A, fils de la racine,
    puis tu récupère tous les fils B des noeuds A ayant un attribut att1 dont la valeur est a1.
    enfin, tu prends le dernier des noeuds B[@att1=''a1'']

    /A/B[position()=last] [@att1=''a1'']
    Tu sélectionne les éléments A, fils de la racine,
    puis tu récupère tous les fils B des noeuds A
    pour ne conserver que le dernier,
    puis tu sélectionne uniquement les noeuds ayant un attribut att1 dont la valeur est a1.

    Voila, voila

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    Bonjour,

    On a :
    //A[position() = 1]
    qui est équivalent à
    /descendant-or-self::node()/child::A[position() = 1][/CODE]
    mais différent de
    /descendant::A[position() = 1]

    et il est tout à fait possible que tu obtienne le même résultat !
    Cela dépends bien sûr de ton XML.
    Il est clair que différentes expressions XPath peuvent sélectionner les même noeuds.
    merci infiniment,
    pourriez vous me donner un exemple de document pour lequel on n'obtient pas le mème résultat
    merci d'avance

  4. #4
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Et bien, je te le laisser cherche en exercice.
    Si tu a compris les exemples, alors tu devrais pouvoir trouver un code XML qui réponde à ta question.

    Pour t'aider, tu peux utiliser un processeur XPath comme celui fourni avec Xalan.

    Bon courage.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 579
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    On a :
    //A[position() = 1]
    qui est équivalent à
    /descendant-or-self::node()/child::A[position() = 1][/CODE]
    mais différent de
    /descendant::A[position() = 1]
    La différence n'est pas évidente -_-°.

    Avec la notation //A, la position() des A est évaluée en fonction de leurs éléments voisins, qui ont le même élément père. (d'où le fait que c'est équivalent à /descendant-or-self::node()/child::A)
    Cette expression peut sélectionner un nombre quelconque d'éléments, dont la position dans leur fratrie est 1.

    Avec la notation /descendant::A, la position() des A est évaluée en fonction de leur ordre dans le document, parmi tous les A sélectionnés.
    Cette expression ne peut sélectionner qu'un seul élément, le premier.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Différences entre des algorithmes de classification
    Par javass dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 06/09/2010, 22h54
  2. [WD12E] différence entre version express et version complète
    Par redwire dans le forum WinDev
    Réponses: 2
    Dernier message: 25/02/2010, 21h10
  3. Réponses: 4
    Dernier message: 31/07/2007, 15h43
  4. [SimpleXML] Est-il possible d'utiliser des expressions XPATH 2.0 avec simplexml ?
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/11/2006, 09h14
  5. Réponses: 3
    Dernier message: 27/01/2006, 12h36

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