Administrateur PHPfrance |
3088 Messages
01 déc. 2006, 00:53
J'avais mal lu ton post, je n'avais pas à l'esprit que ta balise <br /> était dans le fichier XML. Dans ce cas, je doute que tu parviennes à faire quoi que ce soit avec un <br> (illégal en XML) et même un <br /> ne sera pas interprété comme du HTML en fait. Même si le sujet m'intéresse, je ne suis pas un spécialiste en XSL, si personne ne parvient à t'aider ici regarde du côté d'
Alsacréations ou Développez.com
Donc pour ton problème actuel, il ne faut pas utiliser CDATA car ça enlève le "sens" de ta balise. Ensuite, il faut comprendre que les noms des balises de ton fichier XML n'ont rien à voir avec le nom des balises HTML. Ton fichier est un fichier XML, pas HTML et il faut essayer de garder la distinction en tête (mais moi-même je n'y arrive pas tout le temps). Donc comme on a dit, c'est du XML, et en XML et bien
<br /> n'a aucune fonction particulière, pas plus que
<maison> ou
<contenu>. Il faut indiquer à XSL que les balises XML
<br /> doivent être remplacée par du HTML lors de la transformation. Voici un exemple rapide:
test.xmlCode : Tout sélectionner
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<page>
Ligne 1<br />
Ligne 2<retour />
Ligne 3<br>mon contenu est ignoré</br>
Ligne 4<retour>mon contenu est affiché</retour>
</page>
test.xslCode : Tout sélectionner
<?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" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="/">
<html>
<head>
<title>Titre de la page</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="br">
<i>(ceci est un retour à la ligne)</i><br />
</xsl:template>
<xsl:template match="retour">
<i>(ceci est un retour à la ligne, voici le contenu de la balise: '<xsl:apply-templates />')</i><br />
</xsl:template>
</xsl:stylesheet>
Comme tu peux le voir, le nom des balises du fichier test.xml importe peu, et tu peux très bien appeler tes
<br /> "retour" si tu préfères. Donc pour chaque balise utilisée dans le fichier XML il faudra indiquer le HTML correspondant dans le fichier XSL. En gros, si ton fichier XML contient du HTML tu vas te retrouver à recopier toutes les balises, par exemple
Code : Tout sélectionner
<xsl:template match="b"><b><xsl:apply-templates /></b></xsl:template>
<xsl:template match="i"><i><xsl:apply-templates /></i></xsl:template>
<xsl:template match="u"><u><xsl:apply-templates /></u></xsl:template>
<xsl:template match="p"><p><xsl:apply-templates /></p></xsl:template>
À noter l'utilisation de
<xsl:apply-templates /> qui est remplacé par le contenu de la balise et applique les autres templates au contenu.