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 :

XSLT retrouver des noeuds qui n'ont pas un enfant d'un certain type.


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut XSLT retrouver des noeuds qui n'ont pas un enfant d'un certain type.
    Bonjour,

    J'ai eu une question d'examen portant sur le XSLT : Retrouver les pièces qui ne contienne pas des pièces fabriquées par michelin.

    J'ai n'ai vraiment aucune idée pour solutionner ce problème. Voici le fichier XML :

    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
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <?xml-stylesheet type="text/xsl" href="ExamXML.xsl"?>
     
    <composition>
    <part name="voiture" manufacturer="renault">
    	<part name="moteur" manufacturer="renault">
    		<part name="bloc moteur" manufacturer="renault"/>
    		<part name="boite de vitesse" manufacturer="shimano"/>
    		<part name="systeme de refroidissement" manufacturer="bosh"/>
    	</part>
    	<part name="roues" manufacturer="renault">
    		<part name="jante" manufacturer="renault"/>
    		<part name="pneu" manufacturer="michelin">
    			<part name="soupape" manufacturer="bosh"/>
    		</part>
    	</part>
    </part>
    <part name="ordinateur" manufacturer="dell">
    	<part name="cpu" manufacturer="intel"/>
    	<part name="ecran" manufacturer="iiyama"/>
    </part>
    </composition>
    La réponse devrait être : "ordinateur", "cpu" et "ecran"


    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,
    Citation Envoyé par Goldenkiller Voir le message
    La réponse devrait être : "ordinateur", "cpu" et "ecran"
    La pièce "moteur" ainsi que ses composants correspondent au critère, elles aussi... Le critère exact qui correspond aux réponses que tu as données serait plutôt : "Retrouver les pièces qui ne contienne pas des pièces fabriquées par michelin et qui font partie de pièces ne contenant pas de pièces fabriquées par michelin", et là "moteur" et ses descendants sont exclus car la pièce "voiture" à laquelle ils appartiennent contient des pièces michelin (les roues).

    Ce qui donne en XPath :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //part[not(ancestor::part/descendant::part[@manufacturer = 'michelin']) and not(descendant::part[@manufacturer = 'michelin'])]
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    et ce xpath là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //part[count(.//@manufacturer="michelin")=0]
    l'idée est de savoir si il existe un descendant n'ayant pas de balise manufacter = 'michelin'

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Effectivement, je dois avoir 9 résultats càd toutes les pièces exceptées : voiture, roue et pneu.

    J'ai trouvé deux réponses grâce à vous.

    GrandFather : je pense que ton Xpath n'est pas bon mais en l'analysant j'ai pu faire ce Xpath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //part[not(descendant-or-self::part[@manufacturer='michelin'])]
    La solution de fraoustin fonctionne, je l'ai juste un peu modifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //part[count(./descendant-or-self::part[@manufacturer='michelin'])=0]
    Merci à vous deux .

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

Discussions similaires

  1. Afficher des lignes qui n'ont pas de résultat
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/10/2007, 16h11
  2. Réponses: 3
    Dernier message: 21/11/2006, 18h26
  3. Réponses: 4
    Dernier message: 08/06/2006, 13h18
  4. la liste des clients qui n'ont pas acheter aucun article ...
    Par TéBeSsI dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2004, 14h57

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