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.
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 <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 & 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>
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
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>
La 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
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;}
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?
Partager