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 :

[XPath] Problème de chemin pour selection de certains noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut [XPath] Problème de chemin pour selection de certains noeud
    Bonjour a tous,
    Voila j'ai un petit problème de XSL.
    Je souhaite selectionner des noeuds xml suivant la valeur d'un attribut d'un de leur fils ?!?
    Comme un petit exemple est mieux qu'un long discour, voici deux petits exemples de ce que je voudrais réaliser :


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <racine>
       <formulaire>
          <commun>
              <class valeur="Toto">
          </commun>
          <toto>
             <Id>1</Id>
             <bureau>12</bureau>
             <batiment>Bat B</batiment>
          </toto>
          <dependances>
             <tutu>
                <id>
                   <Nom>toutou</Nom>
                   <Toto valeur="2">Coucou</Toto>
                   ...
                </id>
                <id>
                   <Nom>tonton</Nom>
                   <Toto valeur="1">Coucou</Toto>
                   ...
                </id>
                <id>
                   <Nom>titi</Nom>
                   <Toto valeur="1">Coucou</Toto>
                   ...
                </id>
                ...
             </tutu>
             <tata>
                <id>
                   <Lieu>Ici</lieu>
                   <Toto valeur="2">Coucou</Toto>
                   ...
                </id>
                <id>
                   <Lieu>Labas</lieu>
                   <Toto valeur="1">Coucou</Toto>
                   ...
                </id>
                 <id>
                   <Lieu>ailleur</lieu>
                   <Toto valeur="1">Coucou</Toto>
                   ...
                </id>
                ...
             </tata>
          </dependances>
       </formulaire>
    <racine>
    voila pour mon fichier xml en entrée.
    Je désire donc selectionner tous les noeuds "id" contenus dans "dependances" dont l'attribut "valeur" du noeud "Toto" est égal a la valeur du noeud Id
    /racine/formulaire/dependance/*/id/Toto[@valeur=/racine/formulaire/Toto/Id]

    Si ce n'était que cela se serais facile, seulement le nom des balises dont je cherche a tester la valeur n'est pas fixe ex :
    je voudrais aussi pourvoir faire
    /racine/formulaire/dependance/*/id/Pouet[@valeur=/racine/formulaire/Pouet/Id]

    Je ne sais pas si j'ai très bien expliqué mon besoin. n'hésitez pas a me demander des précision.

    Merci par avance pour votre aide.

  2. #2
    Membre actif Avatar de snoop
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 354
    Points : 294
    Points
    294
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/formulaire/dependance/*/id/Pouet[@valeur=/racine/formulaire/Pouet/Id]
    A qoi correspond Pouet ?

    Que veux-tu faire exactement ? et qu'est-ce qui ne marche pas ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Pouet (ou 'toto' dans mon exemple) sont des noeuds xml de structure différentes (ayant des noeuds fils différents) mais dont je sais que quelque soit le nom du noeud (pouet, toto....) contient obligatoirement un fils nommé 'Id' qui a un attribut 'valeur' dont je veux récuperer la valeur. Pour cela c'est simple =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/formulaire/*/Id
    Une fois que j'ai récupéré sa valeur, je désire selectionner les noeuds 'id' contenus dans dépendances
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/formulaire/dependances/*/id
    dont noeud fils ayant pour nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine/formulaire/commun/class/@valeur
    a la même valeur que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/formulaire/*/Id
    Voila.
    J'espère avoir été clair, sinon n'hésitez pas a me demander des précisions

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    quelque chose de ce style si j'ai bien compris ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /racine/formulaire/dependance/*/id/*[name() = racine/formulaire/commun/class/@valeur][@valeur=/racine/formulaire/*[name() = name(current())]/Id]

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bonjour Swoög et merci pour ta réponse,
    Oui sa ressemble a ce ke je désire faire... même si g encore du mal a raisonner en xpath
    Je m'en vais de se pas tester et adapter si besoin ta proposition.

    Bon je vien de tester et d'adapter pour que sa colle avec mon fichier xml, mais le pb c'est que sa ne marche pas alors qu'a première vu sa a l'air de coller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/*/formulaire/dependances/*/id/*[name() = /*/formulaire/commun/class/@valeur][@valeur=/*/formulaire/*/Id]"
    Cependant ceci me permettrait de selctionner les balises qui ont le même nom que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*/formulaire/commun/class/@valeur
    et dont la valeur est égale à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [@valeur=/*/formulaire/*/Id]
    Mais comment puis-je récupérer les noeuds id parents de ces balises ? en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "parent::/*/formulaire/dependances/*/id/*[name() = /*/formulaire/commun/class/@valeur][@valeur=/*/formulaire/*/Id]"
    ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Bon merci pour ton aide, j'ai trouvé la solution.
    Voila je me suis débrouillé comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:template match="/*/formulaire/dependances/*/id">
       <xsl:variable name="id1" select="/*/formulaire/*/Id/@valeur" />
       <xsl:variable name="id2"  select="*[name() = /*/formulaire/commun/class/@valeur]/@valeur" />
       <xsl:if test='$id1=$id2'>
       ...
       </xsl:if>
    </xsl:template>
    Merci pour ton aide @++

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Qu'est ce que tu ferais pas sans moi ? ^^

    Tout ça pour dire que t'avais la solution sous les yeux mais pourquoi faire simple quand on peut faire compliqué ?

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Mpppfffff ta solution était encore plus fausse car se n'était pas une erreur de syntaxe mais une erreur de logique... que ferais-tu si je n'était pas logique...

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

Discussions similaires

  1. Lister tous les chemins pour aller d'un noeud à un autre
    Par patricia_zer dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/10/2014, 15h39
  2. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  3. definir chemin pour table liée
    Par branqueira dans le forum Access
    Réponses: 4
    Dernier message: 22/10/2005, 13h44
  4. [JAR]chemin pour acceder au ressources & JAR
    Par DenisLorrain dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/04/2005, 22h45
  5. [C#] Chemin pour mon fichier CSS
    Par the_new dans le forum ASP.NET
    Réponses: 5
    Dernier message: 23/03/2005, 15h25

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