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] Rassembler des données en colonnes suivant un identifiant


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut [XSLT] Rassembler des données en colonnes suivant un identifiant
    Salut!
    Je sais pas si mon Intitulé est claire et je sais pas si ma question le sera.
    Le contexte :
    Voila j'ai un fichier XML adresse.xml qui me permettra d'afficher des liens dans des blocs.
    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
    <blocks>
    	<block number="2" name="Google">
    		<a number="2" name="[google] Gmail" imp="true" url="http://www.gmail.com/"/>
    		<a number="3" name="[google] Google" class="red" imp="true" url="http://www.google.fr/"/>
    		<a number="3" name="[google] Outils linguistiques" url="http://www.google.fr/language_tools?hl=fr"/>
    		<a number="3" name="[google] New" url="http://news.google.fr/"/>
    	</block>
    	<block number="4" name="Divers">
    		<a number="5" name="[sf] Open source" imp="true" url="http://www.sourceforge.net/"/>
    		<a number="9" name="[voyage] SNCF" url="http://www.voyages-sncf.com/leisure/fr/launch/home/"/>
    	</block>
    	<block number="4" name="Plan &amp; Adresse">
    		<a number="7" name="[adresse] Pages jaunes" imp="true" url="http://www.pagesjaunes.fr/"/>
    		<a number="8" name="[plan] Mappy" url="http://www.mappy.fr/"/>
    		<a number="8" name="[plan] Via Michelin" imp="true" url="http://www.viamichelin.fr/"/>
    	</block>
    	<block number="7" name="Programmation">
    		<a number="7" name="[developpez] Developpez" url="http://www.developpez.com/"/>
    		<a number="8" name="[developpez] Forums" url="http://www.developpez.net/forums/index.php/"/>
    	</block>
    	<block number="7" name="Mail">
    		<a number="1" name="[mail] La poste" url="http://laposte.net/"/>
    		<a number="1" name="[mail] Hotmail" url="http://www.hotmail.com/"/>
    	</block>
    </blocks>
    Avec un fichier XSL, j'affiche mes différent blocs dans des div et je les tries avec "number" et "name". Le trie me permet d'arranger ma page et d'afficher les blocs de lien dans l'ordre que je souhaite.
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?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" doctype-public="-//W3C//DTD HTML 4.01//EN" 
    	doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    	<xsl:template match="/">
    		<xsl:element name="html">
    			<xsl:element name="head">
    				<xsl:element name="title">Liens</xsl:element>
    				<xsl:element name="link">
    					<xsl:attribute name="type">text/css</xsl:attribute>
    					<xsl:attribute name="rel">stylesheet</xsl:attribute>
    					<xsl:attribute name="href">adresse.css</xsl:attribute>
    				</xsl:element>
    			</xsl:element>
    			<xsl:element name="body">
    				<xsl:element name="div">
    					<xsl:attribute name="class">superblocks</xsl:attribute>
    					<!--xsl:element name="h1">Liens importants</xsl:element-->
    					<xsl:element name="p">
    						<xsl:for-each select="blocks/child::block | blocks/child::*/child::block">
    							<xsl:sort select="@number" />
    							<xsl:sort select="@name" />
    							<xsl:if test="child::a[attribute::imp='true']">
    								<xsl:element name="div">
    									<xsl:attribute name="class">block</xsl:attribute>
    									<xsl:element name="p">
    										<xsl:for-each select="a">
    											<xsl:sort select="@number" />
    											<xsl:sort select="@name" />
    											<xsl:if test="@imp='true'">
    												<xsl:apply-templates select="." />
    											</xsl:if>
    										</xsl:for-each>
    									</xsl:element>
    									<xsl:element name="div">
    										<xsl:attribute name="class">after</xsl:attribute>
    									</xsl:element>
    								</xsl:element>
    							</xsl:if>
    						</xsl:for-each>
    					</xsl:element>
    					<xsl:element name="div">
    						<xsl:attribute name="class">after</xsl:attribute>
    					</xsl:element>
    				</xsl:element>
    				<xsl:element name="div">
    					<xsl:attribute name="class">superblocks</xsl:attribute>
    					<xsl:element name="h1">Liens </xsl:element>
    					<xsl:element name="p">
    						<xsl:for-each select="blocks/block">
    							<xsl:sort select="@number" />
    							<xsl:sort select="@name" />
    							<xsl:apply-templates select="." />
    						</xsl:for-each>
    					</xsl:element>
    					<xsl:element name="div">
    						<xsl:attribute name="class">after</xsl:attribute>
    					</xsl:element>
    				</xsl:element>
    			</xsl:element>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="block">
    		<xsl:if test="block">
    			<xsl:element name="div">
    				<xsl:attribute name="class">blocks</xsl:attribute>
    				<xsl:if test="@name">
    					<xsl:element name="h1">
    						<xsl:value-of select="@name" />
    					</xsl:element>
    				</xsl:if>
    				<xsl:element name="p">
    					<xsl:for-each select="block">
    						<xsl:sort select="@number" />
    						<xsl:sort select="@name" />
    						<xsl:apply-templates select="." />
    					</xsl:for-each>
    				</xsl:element>
    				<xsl:element name="div">
    					<xsl:attribute name="class">after</xsl:attribute>
    				</xsl:element>
    			</xsl:element>
    		</xsl:if>
    		<xsl:if test="a">
    			<xsl:element name="div">
    				<xsl:attribute name="class">block</xsl:attribute>
    				<xsl:if test="@name">
    					<xsl:element name="h1">
    						<xsl:value-of select="@name" />
    					</xsl:element>
    				</xsl:if>
    				<xsl:element name="p">
    					<xsl:for-each select="a">
    						<xsl:sort select="@number" />
    						<xsl:sort select="@name" />
    						<xsl:apply-templates select="." />
    					</xsl:for-each>
    				</xsl:element>
    				<xsl:element name="div">
    					<xsl:attribute name="class">after</xsl:attribute>
    				</xsl:element>
    			</xsl:element>
    		</xsl:if>
    	</xsl:template>
     
    	<xsl:template match="a">
    		<xsl:if test="@name">
    			<xsl:element name="a">
    				<xsl:attribute name="href">
    					<xsl:value-of select="@url" />
    				</xsl:attribute>
    				<xsl:attribute name="target">_blank</xsl:attribute>
    				<xsl:if test="@imp and not(@class)">
    					<xsl:attribute name="class">important</xsl:attribute>
    				</xsl:if>
    				<xsl:if test="not(@imp) and not(@class)">
    					<xsl:attribute name="class">lien</xsl:attribute>
    				</xsl:if>
    				<xsl:if test="@class">
    					<xsl:attribute name="class"><xsl:value-of select="@class" /></xsl:attribute>
    				</xsl:if>
    				<xsl:value-of select="@name" />
    			</xsl:element>
    		</xsl:if>
    	</xsl:template>
    </xsl:stylesheet>
    Le code du fichier style adresse.css (j'ai mis le minimum pour une bonne présentation)
    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
    html{padding: 0px;}
    body{text-align: center;}
     
    div.superblocks{
    	width : 995px;
    	border: 1px;
    }
    div.superblocks h1{
    	border-bottom: 1px;
    	text-align : center;
    	width : auto;
    }
    div.superblocks p{width : auto;}
    div.blocks{
    	display : inline;
    	float: left;
    	width : 395px;
    	border: 1px;
    }
    div.blocks h1{width : auto;}
    div.blocks p{	width : auto;}
    div.block{
    	display : inline;
    	float: left;
    	width : 185px;
    	border: 1px;
    }
    div.block h1{	width : auto;}
    div.block p{width : auto;}
    a,a.important,a.red{	display: block;}
    a.lien:hover,a.red:hover,a.important:hover{background-color: #e6e6e6;}
    a.important{color:#7d7d7d;}
    a.red{	color:red;}
     
    div.after {clear: both;}
    La problème
    Mais les blocs ne sont pas d'une taille, en hauteur, fixe et qu'avec ma feuille de style je les places les uns après les autres à gauche (je suis pas claire je sais).
    J'arrive avec des troues, verticale, entre les blocs (pas beau ces troues et ca prends beaucoup de place).
    Ce que je souhaite faire, c'est créer des colonnes par "number" et je vois pas comment faire pour mettre les blocs avec le même "number" dans une balise DIV qui me permettra de faire ma colonne.

    Y aura t il un génie en XSL pour résoudre mon problème ou ce que je souhaite faire est impossible en XSL?

  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 : 47
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Ouaip, je pense.
    Sauf que je ne comprend pas le path de la ligne suivante :
    <xsl:apply-templates select="r/t/a[generate-id(.)=generate-id(key('regrouper',.)[1])]"/>

  4. #4
    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 : 47
    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
    Ce n'est pas pour rien qu'il y a un lien sur la methode muench dans cette réponse
    http://xml.developpez.com/faq/?page=3#xslt_doublon

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Okai! Je vais méditer la dessus ce soir.

    Merci du coup de main ou plutôt du coup oeil cowboy!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Arg !!! J 'y arrive pas ...
    Je perds a chaque fois les données block qui ont le même number
    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
    <?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" doctype-public="-//W3C//DTD HTML 4.01//EN" 
    	doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    	<xsl:key name="regrouper" match="block" use="@number"/> 
     
    	<xsl:template match="/">
    		...
    			<xsl:element name="body">
    			...
    				<xsl:element name="div">
    					<xsl:attribute name="class">superblocks</xsl:attribute>
    					....
    					<xsl:element name="p">
    						<xsl:for-each select="blocks/block">
    							<xsl:sort select="@number" />
    							<xsl:sort select="@name" />
    							<xsl:apply-templates select=".[generate-id(.)=generate-id(key('regrouper', @number)[1])]" mode="trie"/>
    						</xsl:for-each>
    					</xsl:element>
    					<xsl:element name="div">
    						<xsl:attribute name="class">after</xsl:attribute>
    					</xsl:element>
    				</xsl:element>
    			</xsl:element>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="block" mode="trie">
    		<xsl:element name="div">
    			<xsl:attribute name="class">col</xsl:attribute>
    			[<xsl:value-of select="@number" />]
    			<xsl:apply-templates select=".[.=current()]" mode="affiche"/>
    			[/<xsl:value-of select="@number" />]
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="block" mode="affiche">
    		...
    	</xsl:template>
    </xsl:stylesheet>

  7. #7
    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 : 47
    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
    je ne comprends pas le résultat que tu veux obtenir, un exemple serait le bienvenue.
    En attendant j'ai corrigé les erreurs de ton code, notamment dans les apply-templates
    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
    <?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" doctype-public="-//W3C//DTD HTML 4.01//EN" 
    	doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    	<xsl:key name="regrouper" match="block" use="@number"/> 
     
    	<xsl:template match="/">
    		...
    			<xsl:element name="body">
    			...
    				<xsl:element name="div">
    					<xsl:attribute name="class">superblocks</xsl:attribute>
    					....
    					<xsl:element name="p">
     
     
    							<xsl:apply-templates select="blocks/block[generate-id(.)=generate-id(key('regrouper', @number)[1])]" mode="trie">
    								<xsl:sort select="@number" />
    							<xsl:sort select="@name" /></xsl:apply-templates>
     
    					</xsl:element>
    					<xsl:element name="div">
    						<xsl:attribute name="class">after</xsl:attribute>
    					</xsl:element>
    				</xsl:element>
    			</xsl:element>
     
    	</xsl:template>
     
    	<xsl:template match="block" mode="trie">
    		<xsl:element name="div">
    			<xsl:attribute name="class">col</xsl:attribute>
    			[<xsl:value-of select="@number" />]
    			<xsl:apply-templates select="../block[.=current()]" mode="affiche"/>
    			[/<xsl:value-of select="@number" />]
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="block" mode="affiche">
    		....
    	</xsl:template>
    </xsl:stylesheet>

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Ce que je souhaite avoir, c'est quelque chose comme :
    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
    <div class="col">
          <!-- tous les blocks avec le number 1 -->
          <div>
                <!-- block A -->
          </div>
          <div>
                <!-- block P -->
          </div>
    </div>
    <div class="col">
          <!-- tous les blocks avec le number 2 -->
          <div>
                <!-- block C -->
          </div>
    </div>
    <div class="col">
          <!-- tous les blocks avec le number 3 -->
          <div>
                <!-- block B -->
          </div>
          <div>
                <!-- block D -->
          </div>
    </div>
    Regrouper dans une balise div (qui jouera le rôle d'une colonne) les blocks qui on le même number et garder un ordre alphabétique des blocks dans les colonnes
    ...
    mais en y réfléchissant bien, je crois que si je veux garder un contrôle, totale, de l'ordre des blocks, il va falloir que je rajoute une var col et faire un premier trie avec.

    Je te remercie pour ton aide.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Ce qui ne changera rien a mon problème ... je devrai peu être réfléchir au moins une heure avant de poster n'importe quoi!!!

  10. #10
    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 : 47
    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
    Bon, pour l'exemple il y a de l'idée, mais pas encore ça

    Est ce que tu pourrais le refaire en utilisant les données xml que tu as fourni dans ton premier post.
    En effet dans celui-ci il n'y a pas de bloc 1 (mais il y a des a avec ce nombre) et pas de bloc A,B,C.... donc un peu de mal à faire le lien

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Je vais donner un bon exemple cette fois (enfin je l'espère). Le fichier XML :
    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
    <blocks> 
    	<block number="2" name="Google">
    		<a number="2" name="[google] Gmail" imp="true" url="http://www.gmail.com/"/>
    		<a number="3" name="[google] Google" class="red" imp="true" url="http://www.google.fr/"/> 
    		<a number="3" name="[google] Outils linguistiques" url="http://www.google.fr/language_tools?hl=fr"/>
    		<a number="3" name="[google] New" url="http://news.google.fr/"/>  </block>  <block number="4" name="Divers">
    	</block>
    	<block number="4" name="Plan &amp; Adresse"> 
    		<a number="7" name="[adresse] Pages jaunes" imp="true" url="http://www.pagesjaunes.fr/"/>
    		<a number="8" name="[plan] Mappy" url="http://www.mappy.fr/"/>
    		<a number="8" name="[plan] Via Michelin" imp="true" url="http://www.viamichelin.fr/"/> 
    		<a number="9" name="[voyage] SNCF" url="http://www.voyages-sncf.com/leisure/fr/launch/home/"/>
    	</block>
    	<block number="7" name="Programmation"> 
    		<a number="7" name="[developpez] Developpez" url="http://www.developpez.com/"/>
    		<a number="8" name="[developpez] Forums" url="http://www.developpez.net/forums/"/> 
    	</block>
    	<block number="2" name="Mail">
    		<a number="1" name="[mail] La poste" url="http://laposte.net/"/> 
    		<a number="1" name="[mail] Hotmail" url="http://www.hotmail.com/"/>
    	</block> 
    	<block number="7" name="Pero">
    		<a number="1" name="[site] La taverne" url="http://sir.floppy.free.fr/"/> 
    	</block> 
    </blocks>
    Le rendu :
    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
    <div class='col'>
    	<!-- number = 2 -->
    	<div class='block'>
    		<h1>Google</h1>
    		<p>
    			<a href="http://www.gmail.com/" target="_blank">[google] Gmail</a>
    			<a href="http://www.google.fr/" target="_blank">[google] Google</a>
    			...
    		</p>
    	</div>
    	<div class='block'>
    		<h1>Mail</h1>
    		<p>
    			<a href="http://laposte.net/" target="_blank">[mail] La poste</a>
    			<a href="http://www.hotmail.com/" target="_blank">[mail] Hotmail</a>
    		</p>
    	</div>
    </div>
    <div class='col'>
    	<!-- number = 4 -->
    	<div class='block'>
    		<h1>Google</h1>
    		<p>
    			<a href="http://www.pagesjaunes.fr/" target="_blank">[adresse] Pages jaunes</a>
    			<a href="http://www.mappy.fr/" target="_blank">[plan] Mappy</a>
    			...
    		</p>
    	</div>
    </div>
    <div class='col'>
    	<!-- number = 7 -->
    	<div class='block'>
    		<h1>Pero</h1>
    		<p>
    			<a href="http://sir.floppy.free.fr/" target="_blank">[site] La taverne</a>
    		</p>
    	</div>
    	<div class='block'>
    		<h1>Programmation</h1>
    		<p>
    			<a href="http://www.developpez.com/" target="_blank">[developpez] Developpez</a>
    			<a href="http://www.developpez.net/forums/" target="_blank">[developpez] Forums</a>
    		</p>
    	</div>
    </div>

  12. #12
    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 : 47
    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
    il faut changer le xsl:copy-of , un peu la flemme, pour le reste je crois que ca repond à ta description
    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
    <?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="xml" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" 
    	doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    	<xsl:key name="regrouper" match="block" use="@number"/> 
     
    	<xsl:template match="/">
     
    			<xsl:element name="body">
     
    				<xsl:element name="div">
    					<xsl:attribute name="class">superblocks</xsl:attribute>
     
    					<xsl:element name="p">
     
     
    							<xsl:apply-templates select="blocks/block[generate-id(.)=generate-id(key('regrouper', @number)[1])]" mode="trie">
    								<xsl:sort select="@number" />
    							<xsl:sort select="@name" /></xsl:apply-templates>
     
    					</xsl:element>
    					<xsl:element name="div">
    						<xsl:attribute name="class">after</xsl:attribute>
    					</xsl:element>
    				</xsl:element>
    			</xsl:element>
     
    	</xsl:template>
     
    	<xsl:template match="block" mode="trie">
    		<xsl:element name="div">
    			<xsl:attribute name="class">col</xsl:attribute>
     
    			<xsl:apply-templates select="../block[@number=current()/@number]" mode="affiche"/>
     
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="block" mode="affiche">
    		<div class="block">
    		<h1><xsl:value-of select="@name"></xsl:value-of></h1>
    		<p>
    		<xsl:copy-of select="a"></xsl:copy-of>
    		</p>
    		</div>
    	</xsl:template>
    </xsl:stylesheet>

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Ok! c'est bon, ca marche comme je veux!
    Je te remercie encore pour ton aide.

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

Discussions similaires

  1. [XSLT] Mettre des données dans un attributs de balise html
    Par Jimmy_S dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/01/2008, 16h04
  2. Réponses: 2
    Dernier message: 19/01/2007, 07h00
  3. regrouper des données en colonne
    Par antakini dans le forum Access
    Réponses: 4
    Dernier message: 24/11/2006, 14h35
  4. Rassembler des données dans une requete
    Par energies dans le forum Access
    Réponses: 2
    Dernier message: 31/03/2006, 12h39
  5. [XSLT] Réorganisation des données
    Par castaka dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2005, 18h24

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