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] for-each imbriqué et plusieurs noeuds


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut [XSLT] for-each imbriqué et plusieurs noeuds
    Il existe plusieurs niveaux d'utilisateurs:
    - Administration
    - Borne
    - Caisse
    - Gestion

    Je voudrais sélectionner par défaut le niveau de l'utilisateur.

    Voici mon fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <utilisateur niveau="Caisse">Toto</utilisateur>
    <niveaux>
    	<niveau>Administration</niveau>
    	<niveau>Borne</niveau>
    	<niveau>Caisse</niveau>
    	<niveau>Gestion</niveau>
    </niveaux>
    Voici mon code XSLT:
    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
     
    <xsl:for-each select="utilisateur">
    	<xsl:apply-templates select="@niveau" />
    </xsl:for-each>
     
    <xsl:template match="@niveau">
    	<select name="niveau">
    		<xsl:for-each select="/niveaux">
    			<xsl:for-each select="niveau">
    				<xsl:apply-templates select="." />
    			</xsl:for-each>
    		</xsl:for-each>
    	</select>
    </xsl:template>
     
    <xsl:template match="niveau">
    	<xsl:choose>
    		<xsl:when test=".='[niveau_de_l_utilisateur]'">
    			<option><xsl:attribute name="name"><xsl:value-of select="." /></xsl:attribute><xsl:value-of select="." /><xsl:attribute name="selected"><xsl:value-of select="selected" /></xsl:attribute><xsl:value-of select="." /></option>
    		</xsl:when>
    		<xsl:otherwise>
    			<option><xsl:attribute name="name"><xsl:value-of select="." /></xsl:attribute><xsl:value-of select="." /></option>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    Où [niveau_de_l_utilisateur] doit être remplacer par la valeur qu'il faut, mais je ne sais pas quoi mettre.

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    plusieurs choses

    1)ceci est faux.On n'utilise la syntaxe / seul uniquement pour la racine du document.Je te conseille la relecture d'un tuto xpath
    http://jerome.developpez.com/xmlxsl/xpath/

    2)ton système de boucle imbriqué est inutile, il ne faut pas penser en langage itératif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		<xsl:for-each select="niveaux">
    			<xsl:for-each select="niveau">
    				....
    			</xsl:for-each>
    		</xsl:for-each>
    se traduit par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="niveaux/niveau">
     
    				.....
     
    		</xsl:for-each
    >

    3) même ce for-each est inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="niveaux/niveau" />
    fera la même chose ici

    Pour ta question proprement dit je ne comprends pas bien ce que tu appelle niveau par defaut
    pour récupérer la valeur de l'utilisateur c'est //utilisateur/@niveau

  3. #3
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Merci,

    Je vais commencer par rendre le code plus propre déjà.
    Je débute en XSLT et pour la synthaxe, je me suis inspiré d'un projet que je reprends.

    Note: très interressant ton lien sur les XPATH

  4. #4
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Grace à ton lien, j'ai réussi à résoudre mon problème.

    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
     
    	<xsl:template match="@niveau">
    		<select name="niveau">
    			<xsl:call-template name="affiche_niveaux">
    				<xsl:with-param name="niveau_utilisateur" select="." />
    			</xsl:call-template>
    		</select>
    	</xsl:template>
    	<xsl:template name="affiche_niveaux">
    		<xsl:param name="niveau_utilisateur" select="none" />
    		<xsl:for-each select="//niveaux/niveau">
    			<xsl:choose>
    				<xsl:when test=".=$niveau_utilisateur">
    					<option name="{.}" selected="selected"><xsl:value-of select="." /></option>
    				</xsl:when>
    				<xsl:otherwise>
    					<option name="{.}"><xsl:value-of select="." /></option>
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:for-each>
    	</xsl:template>
    Merci

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

Discussions similaires

  1. [XSLT] for-each imbriqué
    Par mouna201 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 28/09/2010, 02h00
  2. [XSLT]for-each imbriqués, et autres galères...
    Par Sarrus dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/03/2006, 17h57
  3. [XSLT] for-each
    Par totoen dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 13/03/2006, 07h50
  4. [xslt] For-each dans template avec format XML (row)
    Par Steff1985 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/11/2005, 11h14
  5. [XSLT]for-each imbiqués
    Par Capt. Flame dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 24/10/2005, 12h57

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