Salut à tous !
Me heurtant à un mur en tentant de développer un petit truc en <gras>XML/XSL</gras> sympa pour mes cours, je viens quérir votre aide !
Voilà le topo : je dois rédiger un texte d'une dizaine de pages et comme je n'aime pas le travail mal fait j'ai décidé de me pourvoir d'une structure de données arborescente.
Le code 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 <racine> <paragraphe titre="P1"> <paragraphe titre="P11"> P11 </paragraphe> <paragraphe titre="P12"> <paragraphe titre="P121"> <paragraphe titre="P1211"> P1211 </paragraphe> </paragraphe> </paragraphe> </paragraphe> <paragraphe titre="P2"> P2 </paragraphe> </racine>
Rendu Souhaité
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 <p> <h1>Titre P1</h1> <p> <h2>Titre P11</h2> <p> P11 </p> <h2>Titre P12</h2> <p> <h3>Titre P121</h3> <p> <h4>Titre P1211</h4> <p> P1211 </p> </p> </p> </p> <h1>Titre P2</h1> <p> P2 </p> </p>
Restrictions
- Les balises de titre doivent aller de h1 à h6
- Au delà de h6 remplacer la balise de titre par un <div class="titreParagraphe"></div>
- Si l'attribut titre est vide alors ne pas afficher de titre ni de balise de titre
Côté XSL
Etant débutant et les docs sur le web étant ce qu'elles sont, je n'ai pas réussi à parvenir à quelque chose qui s'approcherait de ce que je souhaite.
Voilà quand même où j'en suis (le code provoque des erreurs)
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 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" omit-xml-declaration="yes" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" /> <xsl:template match="/"> <xsl:for-each select="paragraphe"> <xsl:call-templates name="par"> <xsl:with-param name="lvl" value="1" /> <xsl:with-param name="elem" value="." /> </xsl:call-templates> </xsl:for-each> </xsl:template> <xsl:template name="par"> <xsl:param name="lvl" /> <xsl:param name="elem" /> <xsl:element name="h{$lvl}"> <xsl:value_of select="{$lvl}/@titre" /> </xsl:element> <p> <xsl:for-each select="{$elem}/paragraphe"> <xsl:call-templates name="par"> <xsl:with-param name="lvl" value="{$lvl}+1" /> <xsl:with-param name="elem" value="." /> </xsl:call-templates> </xsl:for-each> </p> </xsl:template> </xsl:stylesheet>
Merci d'avance !
PS : S'il vous faut des précisions je les donnerai dès que possible
PPS : Si vous voyez une faute de frappe dans le code ne me dîtes pas que l'erreur vient de là, c'est pas le cas![]()
Partager