XML : insérer une balise HTML qui ne sera pas fermée

Bonjour à tous

Je souhaite obtenir le code HTML suivant à partir d’un fichier XML :

[code]

Un test

Ceci est un test.

[/code]

Voici mon fichier “test.xml” :

[code]<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet href="test.xsl" type="text/xsl"?> Ceci est un test. [/code]

Et voici le fichier “test.xsl” associé :

[code]<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match="/">
Un test

<xsl:apply-templates/>

</BODY>
</HTML>

</xsl:template>

<xsl:template match=“montest”>
xsl:apply-templates/
</xsl:template>

<xsl:template match=“autre”>
<xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>[/code]

Le problème, c’est que lorsque j’ouvre mon fichier XML avec Firefox ou équivalent, j’obtiens l’erreur suivante :

[quote]Erreur d’analyse XML : balise ne correspondant pas. Attendu : .
Emplacement : file:///E:/cluxter/test.xsl
Numéro de ligne 22, Colonne 3 :</xsl:template>
–^[/quote]

Ca vient du fait que le parseur XML interprète la balise “” comme étant du XML et ne trouve pas de balise fermante.

Comment puis-je faire pour éviter cela ?? J’ai bien cherché dans tous les sens pendant 2 jours, avec CDATA, < et d’autres trucs, mais je ne suis arrivé à rien. Donc plutôt que de vous faire la liste de tout ce qui n’a pas fonctionné, je vous demande tout simplement comment je pourrais faire ?

Merci de votre aide, je galère là…

Salut. J’ai fait un truc qui a l’air de marcher, après est-ce que c’est propre je ne sais pas.

test.xsl :

[code]<?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” encoding=“utf-8” doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system=“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”/>

<xsl:template match="/">


Un test


xsl:apply-templates/


</xsl:template>

<xsl:template match=“montest”>
xsl:apply-templates/
</xsl:template>

<xsl:template match="//text()[not(ancestor::autre)]">

<xsl:value-of select="."/>

</xsl:template>

</xsl:stylesheet>
[/code]

Je “compile” (?) avec la ligne de commande xsltproc -o out.html test.xsl test.xml

ensuite la sortie dans firefox a le code source suivant

[code]

Un test Ceci est un test. [/code]

Merci beaucoup pour ton aide !!

Mais j’ai trouvé pourquoi ça ne fonctionnait pas… J’avais testé en utilisant la chose suivante dans mon code XSL pour introduire ma balise “” qui n’est pas immédiatement fermée :

<xsl:text disable-output-escaping="yes">&lt;b></xsl:text>

et ça ne fonctionnait pas, alors que d’après ce que j’avais compris dans la documentation officielle de XSLT, ça aurait dû fonctionner !!

Et voici pourquoi (avec la solution qui donne mal au coeur :078 ) : nayi.free.fr/wp/?p=120

C’est Firefox 3.x qui est buggué jusqu’à la moelle !!! Ca fait des années que cet attribut n’est pas pris en charge, je me demande comment ça se fait ! Sous Internet Explorer 7, ça fonctionne sans problème… C’est incompréhensible !

Si quelqu’un sait comment ça se fait, je serais très curieux de savoir. C’est en tout cas très surprenant pour un navigateur censé respecter au mieux les standards.

EDIT : voici le débat officiel avec les explications qui datent de… 2001 !!! : bugzilla.mozilla.org/show_bug.cgi?id=98168

Et la vraie raison derrière tout ça est que ça serait trop coûteux en termes de performances (car il faut interpréter 2 fois la page au lieu d’une). Ainsi, pour s’assurer que le code est correctement interprété, il faut le parser du côté du serveur, afin d’obtenir le code HTML qui sera envoyé au client. Or, j’aurais voulu que le code XML soit parsé par le client, ça permet d’économiser énormément de ressources sur le serveur !! Bref, ça fait 10 ans qu’ils ne veulent pas corriger ce bug, donc ça m’étonnerait qu’ils le fassent un jour. Ce qui est très con étant donné qu’il s’agit d’une règle standardisée dans la définition officielle d’XML !

C’est facile de faire un navigateur rapide s’il ne fait que la moitié du boulot…

EDIT 2 : Et Firefox 4 ne semble pas le supporter non plus si j’en crois la Beta… Quelle bande de bras cassés.