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

XML/XSL et SOAP Discussion :

Transformation XML - XSLT


Sujet :

XML/XSL et SOAP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut Transformation XML - XSLT
    Re,

    Je reviens une fois encore car j'ai un autre souci. J'aimerai afficher seulement les informations d'un seul étudiant.
    Comme j'ai mis mes requêtes dans la boucle for-each, il m'affiche les infos pour tous les étudiants. Hors si j'enlève la boucle je n'aurais pas les données qui sont dans la fonction "xsl: choose".

    Voilà mon code 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
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <!-- New XSLT document created with EditiX XML Editor (http://www.editix.com) at Mon Mar 02 16:16:29 CET 2015 -->
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:output method="html"/>
     
    	<xsl:template match="/">
    	<html>
    		<head>
    			<meta charset="utf-8"/>
    			<title>Profil d'un étudiant</title>
    		</head>
     
    		<body style="background-color:#d0caca; width:100%">
    			<h1>Profil d'un ancien étudiant</h1>
     
    			<h2 style="background-color:#406e90; color:#fff; width:260px">Profil d'un étudiant:</h2>
     
                <div style="display:inline-block; vertical-align: top" >
                	<img src="Avatar.png" width="100" height="100" alt="Avatar d'un étudiant" />
                </div>
     
                <div style="display:inline-block">
                	<xsl:for-each select="carnetDadresse/alumni/alumnus">
                		<strong>Prénom : </strong><span><xsl:value-of select="prenom"/></span>
     
    <br/>
                		<strong>Nom : </strong><span><xsl:value-of select="nom"/></span><br/>
                		<strong>Date de naissance : </strong><span><xsl:value-of select="date_naissance"/></span><br/>
                		<span>
                		<xsl:variable name="alumnus" select="@fk_id_adresse"/>
                			<xsl:choose>
                			<xsl:when test="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]">
                			<strong>Adresse : </strong><xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/numero"/> 
     
                			<xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/rue"/><br/>
                			<xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/code_postal"/> 
                			<xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/ville"/><br/>
                			<strong>Téléphone : </strong><span style="color:#1510a2;"><xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/telephone"/></span><br/>
                			<strong>Email : </strong><span style="color:#1510a2;"><xsl:value-of select="/carnetDadresse/adresses/adresse[@pk_id_adresse = $alumnus]/email"/></span>
                		</xsl:when>
                		<xsl:otherwise>
    		        <xsl:value-of select="'&#xa0;'" />
    		    </xsl:otherwise>
                	</xsl:choose>
                	</span><br/>
                	<span>
                		<xsl:variable name="alumnus" select="@fk_id_entreprise"/>
                		<xsl:choose>
                	        	<xsl:when test="/carnetDadresse/entreprises/entreprise[@pk_id_entreprise = $alumnus]">
                			<strong>Nom de l'entreprise : </strong><xsl:value-of select="/carnetDadresse/entreprises/entreprise[@pk_id_entreprise = $alumnus]/nom_entreprise"/><br/>
                			<strong>Fonction : </strong><xsl:value-of select="/carnetDadresse/entreprises/entreprise[@pk_id_entreprise = $alumnus]/fonction"/><br/>
                		       <strong>Date d'entrée : </strong><xsl:value-of select="/carnetDadresse/entreprises/entreprise[@pk_id_entreprise = $alumnus]/date_entree"/>
                			</xsl:when>
                			<xsl:otherwise>
    				        <xsl:value-of select="'&#xa0;'"/>
    				 </xsl:otherwise>
                			</xsl:choose>
                		</span><br/>
                	</xsl:for-each>
                </div>	
    		</body>
    	</html>
    	</xsl:template>
    </xsl:stylesheet>
    J'ai besoin de l'aide.

    Merci encore!

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    x-ref
    http://www.developpez.net/forums/d15...tion-xml-xslt/

    Au premier temps, il suffit à limiter la boucle de alumnus. Par exemple, si on ne veut que sorte les info sur alumnus avec une identité pk_id_alumnus A2, on peut modifier le xsl:for-each comme ça :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:variable name="id" select="'A2'" />
    <xsl:for-each select="carnetDadresse/alumni/alumnus[@pk_id_alumnus = $id]">
        <!-- etc etc -->
    </xsl:for-each>
    Comme ça vous mettez chaque fois la valeur de id (A1, A2 etc) que vous entendez vouloir sortir...

    Au deuxième temps, vous pouvez mettre en haut un xsl:param comme enfant direct de xsl:stylesheet; comme ça vous pouvez fournir une valeur dynamiquement par une application exterieuse ou quelque moyen pertinent ou une valeur fixe manuellement.

    Au troisième temps, vous séparez la partie de la constructeur de chaque td dans un template match="alumnus" et à sa place mettez un apply-templates
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="carnetDadresse/alumni/alumnus[@pk_id_alumnus = $id]" />
    Comme ça on s'épargne d'utilisation de xsl:for-each sur alumnus pour établir le contexte d'alumnus. Et la séparation de concerne devient plus claire aussi.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut
    Re Tsuji,

    Merci une fois encore pour ton aide.
    Ça marche nickel!

    A +!

Discussions similaires

  1. Transformation XML - XSLT
    Par mOscar007 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 06/03/2015, 18h08
  2. Transformation XML/XSLT: Problème avec le &
    Par bobic dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/01/2009, 17h16
  3. transformation xml via xslt
    Par ronnie dans le forum XSL/XSLT/XPATH
    Réponses: 17
    Dernier message: 10/05/2005, 10h58
  4. [XSLT] transformation XML->XML en php
    Par amellouki dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 03/03/2005, 12h32
  5. [XSLT] [XML->HTML] transformation XML -> HTML via XSL
    Par Great Sayaman dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2004, 22h12

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