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] Regroupement en utilsant xsl:key


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [XSLT] Regroupement en utilsant xsl:key
    Bonjour,

    j'utilise un xsl:key pour faire une rupture dans l'affichage de certaines données
    comme cela dans une table avec différentes lignes.

    <xsl:key name="byGroupe" match="/Item/HierarchicalValue[meaning='Group']" use="value"/>

    je boucle en utilisant avec un sort et je parviens à afficher cela

    GROUPE 1 :
    value a
    value b
    value c
    GROUPE 2 :
    value x
    value y
    value z

    et cela marche très bien mais prend énormément de place
    je voudrais afficher plutôt comme cela

    GROUPE 1 : value a, value b, value c
    GROUPE 2 : value x, value y, value z

    Je comptais mettre mes values dans des tags <span> mais ceux-ci se placent
    au-dessus de ma table.
    Il me faut absolument placer mes valeurs dans un tag <td> mais cela ne sera possible que si j'arrive à déterminer le dernier élement d'un groupe.

    Vous avez une idée lumineuse ?

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    celà vient du code que tu génère, sans plus d'infos dessus, impossible à mon avis de t'aider...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Pourrai-tu donner plus de code de ton fichier XSLT ? Et donnez le code HTML que tu attend ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    J'ai mis en attachment mon xsl et xml

    XML.xml

    XSL.xsl


    voici ce que j'ai :
    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
     
    <html>
    <body>
    <table cellpadding="0" cellspacing="0">
    	<tr valign="top" style="padding-top:5">
    		<td width="240"><u>/Biologie clinique/Biochimie Médicale</u></td>
    		<td />
    	</tr>
    	<tr><td> </td><td>Chlorures</td>
    	</tr>
    	<tr><td> </td><td>CO2 total</td>
    	</tr>
    	<tr valign="top" style="padding-top:5">
    		<td width="240"><u>/Biologie clinique/Chimie spéciale</u></td>
    		<td />
    	</tr>
    	<tr><td> </td><td>Alpha2-Macroglobuline</td>
    	</tr>
    	<tr><td> </td><td>Alpha2-test alex</td>
    	</tr>
    	<tr><td> </td><td>Alpha2-Macroglobuline</td>
    	</tr>
    </table>
    </body>
    </html>
    et j'aimerai bien qque chose comme cela

    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
     
    <html>
    <body>
    <table cellpadding="0" cellspacing="0">
    	<tr valign="top" style="padding-top:5">
    		<td width="240"><u>/Biologie clinique/Biochimie Médicale</u></td>
    		<td>Chlorures, CO2 total</td>
    	</tr>
    	<tr valign="top" style="padding-top:5">
    		<td width="240"><u>/Biologie clinique/Chimie spéciale</u></td>
    		<td>Alpha2-Macroglobuline, Alpha2-test alex, Alpha2-Macroglobuline</td>
    	</tr>
     
    </table>
    </body>
    </html>

  5. #5
    Membre actif
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Points : 272
    Points
    272
    Par défaut
    Dans ton fichier XSLT tu ne peux pas laisser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <tr>
    <td><xsl:text> </xsl:text></td>
    <td>
    <xsl:value-of select="../../../../Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value"/>
    </td>
    </tr>
    Qui est entre <xsl:for-each ></xsl:for-each> car cela répète le <tr></tr> à chaque valeur. Utilise plutot un template pour le noeud :
    select="../../../../Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value"/>

    Genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <tr>
    <td><xsl:text> </xsl:text></td>
    <td>
    <xsl:apply-template select="../../../../Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value"/>
    </td>
    </tr>
     
    ...
     
    <xsl:template match="/ *chemin_absolu_vers_le_noeud_value...*//Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value">
    <xsl:value-of select=".">
    </xsl:template>
    Déjà avec ça, les <tr></tr> ne vont pas se recréer a chaque noeud.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Dans mon cas, le template n'est pas très utile car je n'affiche qu'une valeur.
    Le problème se situe dans le fait que je dois boucler sur tous les éléments de mon groupement.
    Je viens de trouver, je dois utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<xsl:for-each select="key('groupByType',value)" >	 </xsl:for-each>
    Pour ce que cela intéresse voici mon code.
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="html" encoding="ISO-8859-1"/>
    	<!-- Création de keys pour regrouper les noeuds en fonction du type d'examen demandé-->
    	<xsl:key name="groupByType" match="ROOT/Organiser/Entry[meaning='Examination Request' ]/Item/HierarchicalValue[meaning='Group']/Value/DVText" use="value"/>
    	<xsl:template match="/">
     
     
    		<table cellpadding="0" cellspacing="0" width="600">
     
    			<xsl:for-each select="ROOT/Organiser/Entry[meaning='Examination Request' and name!='']/Item/HierarchicalValue[meaning='Group']/Value/DVText">
    			<xsl:sort select="key('groupByType',value)"/>
     
     
    					<!-- Test si c'est la première valeur du groupement -->
    					<xsl:if test="count(. | key('groupByType', value )[1]) = 1">							
     
    						<tr valign="top" style="padding-top:5">
    							<td width="280">
    								<u>
    									<xsl:value-of select="key('groupByType', value )"/>
    								</u>
    							</td>
    							<td width="420"><xsl:text> </xsl:text></td>
    						</tr>
     
    						<tr>
    							<td width="280"><xsl:text> </xsl:text></td>
    							<td width="420">
    								<!-- On boucle sur tous les éléments du groupement -->
    								<xsl:for-each select="key('groupByType',value)" >		
    										<xsl:choose>
    											<xsl:when test="count(. | key('groupByType', value )[1]) = 1">
    													<xsl:value-of select="../../../../Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value"/>		
    											</xsl:when>
    											<xsl:otherwise>
    												<xsl:text>, </xsl:text><xsl:value-of select="../../../../Item/HierarchicalValue[meaning='Exam']/Value/DVCodedText/value"/>		
    											</xsl:otherwise>
    										</xsl:choose>
     
    								</xsl:for-each>						
    							</td>					
    						</tr>
     
    					</xsl:if>											
    			</xsl:for-each>		
    		</table>
    	</xsl:template>
    je découvre xsl mais je trouve cela super puissant.
    Merci à tous ceux qui ont consacré du temps à me répondre .. à charge de revanche

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

Discussions similaires

  1. [XSLT] Regrouper/Restructurer xml/xsl
    Par RlDuke dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/10/2009, 13h48
  2. [XSLT] Utilisation de xsl:key
    Par blupin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/09/2007, 10h45
  3. [XSLT] peut on faire un select dans un xsl:key ?
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/10/2006, 13h06
  4. Réponses: 6
    Dernier message: 18/08/2006, 09h11
  5. [XSL] recherche infos sur xsl:key
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 17/02/2006, 17h23

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