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] Eviter le traitement des noeud avec même attribut


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] Eviter le traitement des noeud avec même attribut
    Bonjour,

    j'ai dans mon fichier.xml des elements definit par une même balise et de même attribut.

    Je doit creer un menu déroulant par balise de tel sorte à ne traité que les element different.

    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
    <musee nom="Sciences Naturelles">
    	<salle nom="Mammifère">
    		<allee ordre="Artiodactyles">
    			<presentoire famille="Cervidés">
    				<objet espece="Cerf"/>
    				<objet espece="Cerf"/>
    				<objet espece="Chevreuil"/>
    				<objet espece="Daim"/>
    				<objet espece="Caribou"/>
    			</presentoire>
                            <presentoire famille="Giraffidés">
    				<objet espece="Cerf"/>
    				<objet espece="Girafe"/>
    				<objet espece="Okapia"/>
    			</presentoire>
    		</allee>
    	</salle>
    </musee>

    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
    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="*" 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"/> <!-- permet d'avoir uniquement les element du même type que la balise -->
                </select></br>
            <xsl:apply-templates select="*[not(preceding::*[position()= last()])]" mode="menu"/> <!-- evite la repetition de menu identique -->
        </xsl:template> 
     
        <xsl:template match="*" mode="items">
            <option name="{@*}"><xsl:value-of select="@*"/></option>
        </xsl:template>   
     
    </xsl:stylesheet>

    le resultat est donc :

    musée:
    [Menu déroulant de musée comportant : Sciences Naturelles]
    salle:
    [Menu déroulant de salle comportant : Mammifère]
    allée:
    [Menu déroulant de allée comportant : Artiodactyles]
    presentoire :
    [Menu déroulant de presentoire comportant : Cervidés et Giraffidés]
    objet :
    [Menu déroulant de presentoire comportant : Cerf, Cerf, Chevreuil, Dain, Caribou, Cerf, Girafe et Okapia]

    Je voudrait que le menu objet de comprenne qu'une seul fois l'occurence Cerf, donc qu'il soit :
    objet :
    [Menu déroulant de presentoire comportant : Cerf, Chevreuil, Dain, Caribou, Girafe et Okapia]

    Comment est ce possible?
    Je pense que c'est sur <xsl:apply-templates select="???" mode="items"/>

  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,

    le regroupement d'éléments identiques s'effectue en XSLT 1.0 avec la méthode Muench. Tu trouveras de très nombreuses références à cette méthode dans le forum, ainsi que dans la FAQ.

  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
    J'ai regarder ceci :
    http://xml.developpez.com/faq/?page=3#xslt_doublon

    j'ai apliquer le fichier.xsl donné
    Code xsl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     
    <xsl:key name="id" match="Id" use="@espece"/>  
     
    <xsl:template match="/"> 
     
        <xsl:for-each select="//Id[generate-id(.)=generate-id(key('id',@espece)[1])]"> 
          <xsl:value-of select='.'/> 
       </xsl:for-each> 
     
    </xsl:template> 
     
    </xsl:stylesheet>

    à mon fichier xml et cela me rend un fichier.html vide

Discussions similaires

  1. traitement des dates avec java
    Par papoulouis dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 04/10/2008, 11h08
  2. [XPath] test d'existence de noeud avec conditions sur les enfants
    Par MasterOfChakhaL dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 11/04/2007, 10h42
  3. [Xpath] Sélection des noeuds dont un attribut
    Par toxine dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/01/2007, 14h22
  4. [SimpleXML] XML et parcours des noeuds avec foreach
    Par kult dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2005, 15h36
  5. xsl ---> filtrage des noeuds avec "not"
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/07/2005, 11h26

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