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 :

Questions sur XPath


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut Questions sur XPath
    Bonjour,

    Je suis en pleine révison pour les rattrapages et j'aurai besoin d'éclairsir quelques notions en XPath.

    Soit la DTD suivante :
    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
    <!ELEMENT clientele (client+,magasin*)>
    <!ELEMENT client(identite,achat+)>
    <!ATTLIST client idClient CDATA #REQUIRED>
     
    <!ELEMENT identite (nom,localisation)>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT localisation (ville,codePostale)>
    <!ELEMENT ville (#PCDATA)>
    <!ELEMENT codePostale (#PCDATA)>
     
    <!ELEMENT achat (produit)*>
    <!ATTLIST achat idMagasin CDATA #IMPLIED>
    <!ELEMENT produit (#PCDATA)>
    <!ATTLIST produit montant CDATA #IMPLIED>
     
    <!ELEMENT magasin (idMagasin,localisation)>
    <!ELEMENT idMagasin (#PCDATA)>
    J'ai 5 questions la dessus :

    1-Si le le point de départ de l'expression XPATH est produit, comment trouver les produits du même achat (Produit initial exclu).
    2-Si le le point de départ de l'expression XPATH est la racine, trouvez :
    -L'identifiant des client ayant fait leurs achats dans le magasin "mag1".
    -Le nom des clients ayant acheté un produit dont le montant est supérieur à 30.
    -Le nom du client ayant le plus petit identifiant.
    -Le produit le plus cher de chaque achat.


    J'ai essayé d'écrire les requêtes mais je ne sais pas trop si j'ai bon...

    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
    Bah envoie, et si tu estimes que c'est pas évident, dis aussi ton raisonnement.

    On te dira si c'est bon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut
    Voila comment je vois les choses :

    1- /self::produit[parent::achat = //achat]/following-sibling::produit/text(): Je ne sais pas s'il est nécéssaire de remonter jusqu'au père du noeud produit ( achat) pour avoir les produits du même achat sinon je dirais que c'est : /following-sibling::node()/text()

    2-
    a- //client[ parent::*/magasin/idMagasin/text() = "mag1" ]/@identifiant
    b- //client[ achat/produit/@montant > 30 ]/text()
    c- //client[ not(@identifiant > //client/@identifiant) ]/text()
    d- //produit[ (parrent::achat = //achat) and not( @montant &lt; //produit/@montant) ]/ text()

    Le plus gros problème que j'ai c'est que je ne sais pas comment faire pour récuperer les fils du même père

  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
    On t'en aurait pas voulu si tu avais essayé d'abord.
    Tu as le droit de pas comprendre un truc, mais on aurait aimé quelque chose du genre "j'ai essayé <exemple> car je pense que ça marcherait comme ça : <explication>. Mais le résultat que j'obtiens est <résultat réel> alors que j'aurais pensé avoir <résultat attendu>."

    Citation Envoyé par masssine Voir le message
    1- /self::produit[parent::achat = //achat]/following-sibling::produit/text(): Je ne sais pas s'il est nécéssaire de remonter jusqu'au père du noeud produit ( achat) pour avoir les produits du même achat sinon je dirais que c'est : /following-sibling::node()/text()
    Le / en début de XPath sert à dire "commence à partir de la racine."
    Donc si on te dit que t'as un point de départ, déjà, tu sais que ça peut pas commencer par /

    À part ça :
    - On te dit que le point de départ est "produit" donc pas besoin de le répéter.
    - Je ne pense pas qu'on t'oblige à indiquer les text(), quel serait l'intérêt ?
    - Je vois qu'il y a du following-sibling dans ton essai. Ça a l'air bien, mais tu n'obtiens alors que les <produit> qui sont après. On t'a demandé tous les <produit>, à part celui du point de départ.
    - Te complique pas la vie. La réponse ne contient que deux choses.

    Citation Envoyé par masssine Voir le message
    a- //client[ parent::*/magasin/idMagasin/text() = "mag1" ]/@identifiant
    Euh ? C'est quoi la logique ?
    Pourquoi tu vas chercher des <magasin> quand on te parle de leur identifiant ?

    Citation Envoyé par masssine Voir le message
    b- //client[ achat/produit/@montant > 30 ]/text()
    Très bien, mais on t'a demandé un nom.

    Citation Envoyé par masssine Voir le message
    c- //client[ not(@identifiant > //client/@identifiant) ]/text()
    Même remarque.
    À noter qu'en XPath 2.0 il y a la fonction min()


    Citation Envoyé par masssine Voir le message
    Le plus gros problème que j'ai c'est que je ne sais pas comment faire pour récuperer les fils du même père
    En général le plus simple est ../* "remonter au père, et sélectionner tous les fils."
    Mais si on veut exclure l'élément en cours, là il faut ruser. Personnellement j'aime bien "les voisins précédents et les voisins suivants." Ce qui fait donc tous les voisins, logique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut
    C'est bon ! Je crois enfin avoir compris comment raisonner en XPath !
    Alors pour la question 1, il suffisait juste de prendre les frères qu'il y avait avant et après noeud de départ. La solution devrait donc etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    following-sibling::node()|preceding-sibling::node()
    Pour la 2-a si j'ai bien compris, ce n'est pas la peine d'aller jusqu'a <magasin> pour faire la comparaison. Il suffit juste de d'aller directement sur <achat> pour récuperer l'attribut "idMagasin" puis de remonter au parent <client> pour récuperer leurs identifiants. La solution devrait donc etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     //achat[@idMagasin = "mag1"]/parent::client/@identifiant
    Pour la 2-b et 2-c, il faut que je prenne le nom aussi. La solution devrait donc etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //client[ achat/produit/@montant > 30 ]/identite/nom
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //client[ not(@identifiant > //client/@identifiant) ]/identite/nom
    Pour la 2-d, tu ne m'as rien dit ! Je dois la concidérer comme OK ?

Discussions similaires

  1. questions sur les SW et xpath :)
    Par BARBIESS dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/10/2010, 12h30
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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