Bonjour à tous.

Mon application propose à l'utilisateur de changer l'apparence de sa page par un système de blocs.

Je récupère depuis une base de données des portions de code html ( les blocs), cette sortie etant ensuite formatée en XML (voir mes sources a la fin du message)

Une feuille XSL me permet ensuite de placer et d'ordonner les différents blocs dans le document HTML final suivant les paramètres du fichier XML.

La transformation se passe bien, je n'ai aucun problème à l'affichage.

Le problème est au niveau de la source de fichier html produit, en effet :

- Je récupère toujours un fichier HTML sur une seule ligne, sans retour à la ligne
-Si au niveau de la base de données, je formate mes blocs HTML (indentation et retour à la ligne), j'obtiens des carré noir dans le fichier source HTML à la place des retours à la ligne. (si je supprime tous les retours à la ligne dans le formatage des blocs de la BDD, je n'ai pas ce problème)

Ma question est donc la suivante : comment arriver à obtenir un formatage correct du fichier HTML de sortie (indentation et retours chariots) ?

En gros, je souhaite que le formatage initial soit gardé par la transformation XSL...

Je ne suis pas expert en XSL, et j'avoue qu'après quelques jours dessus et beaucoup de tests, je ne vois pas la solution ...

Merci d'avance pour un ptit coup de main !

Jiib

Feuille 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
<?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" indent="no" encoding="iso-8859-1" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
      <xsl:strip-space elements="*" />
      <xsl:template match="/">
        <xsl:for-each select="/page/block[@zone= ''head'']">
          <xsl:sort select="@position" />
          <xsl:value-of select="data" disable-output-escaping="yes" />
        </xsl:for-each>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[
            <body> <div id="container"> <div id="topbar"> <h1><$Title$></h1> <h2><$Description$></h2> </div> <div id="content"> <div class="blogbody">
          ]]>
        </xsl:text>
        <xsl:for-each select="/page/block[@zone= ''centercol'']">
          <xsl:sort select="@position" />
          <xsl:value-of select="data" disable-output-escaping="yes" />
        </xsl:for-each>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[
            </div> </div> <div id="rightbar"> <div class="navlinks">
          ]]>
        </xsl:text>
        <xsl:for-each select="/page/block[@zone= ''rightcol'']">
          <xsl:sort select="@position" />
          <xsl:value-of select="data" disable-output-escaping="yes" />
        </xsl:for-each>
        <xsl:text disable-output-escaping="yes">
          <![CDATA[
            </div> </div> <div style="clear: both;">&nbsp;</div></div> </body> </html>
          ]]>
        </xsl:text>
      </xsl:template>
    </xsl:stylesheet>
Exemple de source XML : (j'ai volontairement enlevé les balises des blocs HTML, je pense que cela n'a pas d'interêt pour l'exemple)

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
<?xml version="1.0" encoding="iso-8859-1"?>
    <page>
      <block name="post" position="1" zone="centercol">
        <data>
          <![CDATA[
            ....BLOC HTML ...
          ]]>
        </data>
      </block>
      <block name="post" position="2" zone="centercol">
        <data>
          <![CDATA[
            ....BLOC HTML ...
          ]]>
        </data>
      </block>
      <block name="headhome" position="1" zone="head">
        <data>
          <![CDATA[
            ....BLOC HTML ...
          ]]>
        </data>
      </block>
    </page>