salut

je craque! je ne suis pas spécialement débutant et utilise depuis plusieurs années xml couplé à php ou actionscript mais quand je souhaites utilisé sxl/xslt là...çà dérape sérieux.

problème 1 : le plus "grave", msxml étant la base du moteur xml ie6/7 la balise est :

<?xml-stylesheet type="text/xsl" href="fichier.xslt"?>

evidement, c'est invalide, encore que, xmlspy, que j'utilise, le considère comme valide...mais ni firefox ni opera ne l'encaisse.affichage d'une erreur de chargement avec firefox et opera ne s'en soucie pas et affiche le xml ou le rss formaté à sa façon, c'est selon.affichage du rss formaté par défaut et de l'arbre si xml.

donc je change pour çà :

<?xml-stylesheet type="Application/xslt-xml" href="fichier.xslt"?>

mais firefox/opera affiche le xml/rss en brut sans transformation xslt et...ie affiche l'arbre mais là c'est normal Smiley fache

alors quoi? j'ai lù pas mal de xslt et tous utilises le text/xsl d'ie y compris dans des bouquins spécialisés et google, çà fait une semaine que je le fait surchauffé, n'est pas mon ami Smiley decu ...ingrat que tu es!

bref! une suggestion?

problème 2 : l'encodage

tous les fichiers sont encodés avec utf-8, xml, dtd, xslt, xhtml généré et ... résultats avec firefox/opera, pas de soucis, hormis ceux déjà cités, au moins l'encodage est correct mais ie affiche ces signes cabalistiques signe d'une mauvaise prise en charge de l'encodage utf-8.quelle plaie! avec une génération php pure, je n'ai pas ces soucis mais finalement c'est logique...

si çà peut aider à la "comprennete", mon fichier test xslt


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
	<xsl:output method="xhtml" version="1.0" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
	<xsl:template match="categorie">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-FR">
	<head>
	<meta http-equiv="Content-Type" content="text/html; UTF-8" />
	<title>les tests logiciels</title>
	<link rel="stylesheet" rev="stylesheet" type="text/css" href="style.css" media="screen" />
	</head>
	<body>
	<h3><xsl:value-of select="@titre" /></h3>
	<xsl:apply-templates/>
	</body>
	</html>
	</xsl:template>
	
	<xsl:template match="bloc_infos">
	<ul>
	<li>Nom : <xsl:value-of select="nom" /></li>
	<li>Version : <xsl:value-of select="version" /></li>
	<li>Langue : <xsl:value-of select="langue" /></li>
	<li>Prix : <xsl:value-of select="prix" /></li>
	</ul>
	<p><xsl:value-of select="description" /></p>
	</xsl:template>
</xsl:stylesheet>


NB : j'ai lù les topics suivants qui se rapproche de mon pb Smiley cligne

http://forum.alsacreations.com/topic-3-38402-1-Sortie-html-dun-fichier-xml-associe-a-xslt.html
http://forum.alsacreations.com/topic-3-38106-1-XML-et-interpretation-IEFF.html

mais çà ne résoud pas mon problème.
Modifié par keran (10 Dec 2008 - 19:04)
Modérateur
Salut, Smiley smile

Il faut bien rester avec :
<?xml-stylesheet type="text/xsl" href="fichier.xslt"?>
malgré son invalidité car Firefox, Opera, Safari ou encore IE permettent d'effectuer le rendu de la feuille de style correctement avec ce type, ce qui n'est pas le cas avec un autre type.

En revanche :
<xsl:output
    method="[#red]xhtml[/#]"
    version="1.0"
    encoding="UTF-8"
    indent="yes"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
n'existe pas. A remplacer par method="xml"
salut koala

a écrit :
n'existe pas. A remplacer par method="xml"


c'était bien çà, merci.

en version 2 xhtml existe bel et bien :

<xsl:output name="toc-format" [#[#red]]method="xhtml"[/#] indent="yes"
            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
            doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"/>


http://www.w3.org/TR/xslt20/

mais j'ai toujours ce problème d'encodage avec ie.je suis obligé de passer en utf-8 manuellement dans l'onglet affichage/codage, çà m'énerve.par contre en affichant directement le xml dans le navigateur sans passer par xslt c'est bon, les caractères accentués sont correctement affichés.
Modérateur
a écrit :
en version 2 xhtml existe bel et bien
ok. Smiley smile
C'est parce que XSLT 2 n'était encore supporté que par Saxon il y a peu. Peut-être y'a-t-il aujourd'hui d'autres moteurs de transformation qui suivent mais ce n'est pas encore le cas pour les navigateurs qui ne s'en tiennent qu'à XSLT 1.

a écrit :
par contre en affichant directement le xml dans le navigateur sans passer par xslt c'est bon, les caractères accentués sont correctement affichés
As-tu vérifié que ton fichier xsl est correctement encodé ?
-> exemple dans notepad++ :
* clic sur l'onglet Format et la puce doit se trouver en face de "Encoder en UTF-8 (sans BOM)"

Personnellement, j'effectue la transformation côté serveur via XSLTProcessor en précisant :
header('Content-type: text/html; charset=utf-8');
et mes fichiers xml et xsl sont encodés en utf-8 (sans BOM); je ne rencontre pas de problème ainsi.
Modifié par koala64 (09 Dec 2008 - 14:31)
salut koala

a écrit :
As-tu vérifié que ton fichier xsl est correctement encodé ?
-> exemple dans notepad++ :
* clic sur l'onglet Format et la puce doit se trouver en face de "Encoder en UTF-8 (sans BOM)"


avant de poster c'est ce que j'ai fait à la virgule près.et le fait que je ne rencontre ce problème qu'avec ie me conforte.

en fait, j'ai résolu mon problème avec php, plus de problème d'encodage.

par simple soucis du partage et pour les galériens qui ariveraient par le biais d'un moteur sur cette page et ayant le même pb que moi, j'édite ce post pour la solution complète en utilisant DOM et XSLTProcessor.

1/ passage au xslt 1.0, dommage mais koala à en parti raison pas de version 2.0 avec ie. firefox et opera(windows) l'implemente au moins pour le minimum et considére l'encodage sans bidouilles.

2/ code php sous forme de méthode pour plus souplesse


<?php
function transforme($xsl_f,$xml_f,$charset) {
   header('Content-type: text/html; charset='.$charset);
   $xsl = new DOMDocument();
   $xsl->load($xsl_f);

   $xml = new DOMDocument();
   $xml->load($xml_f);

   $process = new XSLTProcessor();
   $process->importStylesheet($xsl);
   return $process->transformToXML($xml);
}

echo transforme('mon_fichier.xslt','mon_fichier.xml','utf-8');
?>


spécial débutant en php :

tout les fichiers seront encodés en utf-8, pour ce header en tout cas, rien ne l'oblige, iso-8859-1, ou autres, fonctionnent aussi, il suffit d'ajusté.et perso, je vous conseille l'iso si vous avez le choix.la méthode php permet cette souplesse sans en changé le code, seul l'appel change.j'aurais pû écrire :

echo transforme('mon_fichier.xslt','mon_fichier.xml','iso-8859-1');


NB : ne pas oublier, si ce pas déjà fait, de décommenter extension=php_xsl.dll du php.ini

avec tout çà, çà fonctionne parfaitement.[no-troll value="merci!]bien que ce ne soit qu'un contournement pour ce qui est et ne devrait pas...encore une fois!?[/no-troll]
Modifié par keran (10 Dec 2008 - 22:46)