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] selectionner toutes les balises qui n'ont pas etaient traitées


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 17
    Points
    17
    Par défaut [XPath] selectionner toutes les balises qui n'ont pas etaient traitées
    Bonjour,

    Je doit creer un menu déroulant associer à chaqu'une de mes balises present dans mon fichier.xml, ce menu comprend les atributs de chaque occurence de la balise.

    J'ai réussis à remplir comme il faut mes menus déroulant, mais je veux qu'il m'affiche et génère une seule fois le menu deroulant de chaque balise, et pas à chaque fois qu'il la rencontre lors du parcour de l'arbre dom.

    J'ai utilisé cette requette XPath :
    *[not(preceding::*[name()= name(current())])]
    Donc tout les noeud dont le nom des prédecesseur n'est pas egale au nom du noeud courrant.

    Cela fonctionne à moitier, car ça me genere le menu pour chaque balise de la premier balise de rang 1 trouvé et après pas de soucis.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    voici mon fichier.xml:
    Code xml : 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
    <musee>
     <salle>
      <allee>
       <presentoire>
        <objet/>
        <objet/>
        <objet/>
       </presentoire>
       <presentoire>
        <objet/>
       </presentoire>
      </allee>
      <allee>
       <presentoire>
        <objet/>
       </presentoire>
      </allee>
     </salle>
     <salle>
      <allee>
       <presentoire>
        <objet/>
       </presentoire>
      </allee>
     </salle>
    </musee>

    voici mon fichier.xsl:
    Code xsl : 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
    <xsl:template match="/">
     <html><body>
      <xsl:apply-templates select="*" mode="defaut"/>
     </body></html>
    </xsl:template>
     
    <xsl:template match="*" mode="defaut"> 
     <xsl:apply-templates select="[not(preceding-sibling::*[name()= name(current())])]" mode="fils-menu"/> 
    </xsl:template>
     
    <xsl:template match="*" mode="fils"> <!-- creé un item pour chaque element appelé --!>
     <option name="{@*}"><xsl:value-of select="name()"/> : <xsl:value-of select="@*"/></option> 
    </xsl:template>   
     
    <xsl:template match="*" mode="fils-menu"> <!-- cree le menu déroulant pour les fils du musée --!>
     <select name="{name()}">
      <option value="Choix">choisissez</option>
       <xsl:apply-templates select="//*[name()=name(current())]" mode="fils"/>
      </select></br>
      <xsl:apply-templates select="*[not(preceding::*[name()= name(current())])]" mode="fils-menu"/>
    </xsl:template>

    Le resultat de ce fichier.xsl :
    menu déroulant associer à <salle>
    menu déroulant associer à <allee>
    menu déroulant associer à <presentoire>
    menu déroulant associer à <objet/>
    menu déroulant associer à <objet/>
    menu déroulant associer à <objet/>
    menu déroulant associer à <presentoire>
    menu déroulant associer à <allee>

    donc ce que j'ai remarqué, c'est que temp qu'on ne remonte pas sur une balise de niveau superieur il me creer plusieur menu.

    donc il est dans la salle il creer le menu salle,
    il trouve la balise allée qui est "inferieur" il creer le menu,
    il trouve la balise presentoire qui est "inferieur" il creer le menu,
    il trouve la balise objet qui est "inferieur" il creer le menu,
    repasse à une balise "supérieur" qui est presentoire,
    il trouve la balise objet qui est "inferieur" il connait et donc ne creer pas le menu,
    repasse à une balise "supérieur" qui est presentoire, repasse à une balise "supérieur" qui est allée,
    il trouve la balise presentoire qui est "inferieur" il connait et donc ne creer pas le menu,
    etc ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Personne n'as une petite idée?

    en faite il me semble que je doit juste prendre le 1er de chaque fils et donc ignoré les freres mais je ne voit pas comment?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Sujet Résolus!

    J'ai trouvé la réponce comme une grande ^^


    Donc pour ceux que ça interesse voici ma methode :
    J'ai fais un apply-templates sur *[not(child::*[name()= name(current())])]
    Ce template est appelé à tous les fils dont le nom de balise est different du nom de la balise courrant. Ceci pour me creer les menus

    ensuite j'ai un second apply-templates sur *[not(preceding::*[position()= last()])]
    Ce template est appelé à tous les elements dont la possition de la balise est different de la derniere balise. Ceci pour me creer les menus. Ceci pour eviter la repetition des menu !

    Le code de mon fichier.xsl :
    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
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
        <xsl:template match="/">
            <html><body>
                <xsl:apply-templates select="*[not(child::*[name()= name(current())])]" mode="menu"/>
            </body></html>
        </xsl:template>
     
        <xsl:template match="*" mode="menu">
            <br><xsl:value-of select="name()"/> </br> <br> 
                <select name="{name()}">
                    <option value="Choix">choisissez</option>
                    <xsl:apply-templates select="//*[name()=name(current())]" mode="items"/>
                </select></br>
            <xsl:apply-templates select="*[not(preceding::*[position()= last()])]" mode="menu"/>
        </xsl:template> 
     
        <xsl:template match="*" mode="items">
            <option name="{@*}"><xsl:value-of select="@*"/></option>
        </xsl:template>   
     
    </xsl:stylesheet>

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

Discussions similaires

  1. Sélectionner les parents qui n'ont pas d'enfants roux
    Par MatthieuBrunet dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/05/2008, 13h17
  2. [W3C] Recherche d'un logiciel pour détecter les balises qui ne sont pas fermées
    Par Etanne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/11/2007, 16h55
  3. sauvgarder les objets qui n'ont pas été sauvgarder
    Par ferrero dans le forum Hibernate
    Réponses: 5
    Dernier message: 23/05/2007, 16h22
  4. Réponses: 6
    Dernier message: 11/07/2006, 10h04
  5. [XSL] Sélectionner les éléments qui n'ont pas un certain fils
    Par lebechen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 05/07/2006, 17h54

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