Page 1 sur 1

[XSLT] intrepretation des entites HTML

Posté : 07 juin 2006, 10:44
par zeus
Bonjour à tous,

Je doit utiliser une feuille XSL pour mettre en forme un flux XML afin de le présenter en HTML

Dans cette feuille XSL, j'utilise des entités HTML, õ par exemple.

Or, lorsque je lance le moteur XSLT sur mon flux XML, j'ai des messages d'erreur sur cette entité

Code : Tout sélectionner

Warning: DOMDocument::load() [function.load]: Entity 'otilde' not defined in /.../toutes_les_campagnes.xsl, line: 21 in /.../index.php on line 60
Je ne comprend pas pourquoi il n'interprete pas les entites puisqu'il s'agit des entités HTML

Pour lancer le moteur XSLT entre mon flux XML et ma feuille XSL, j'utilise le code suivant:
//--- On importe le fichier XML
$xml = new DOMDocument;
$xml->loadXML($annonceur->getXML($uneCampagne));

//--- On importe le fichier XSL
$xsl = new DOMDocument;
$xsl->load($xsl_file);

//--- Création du processeur XSLT
$proc = new XSLTProcessor;

//--- Affectation de la feuille de style
$proc->importStyleSheet($xsl);

//--- Transformation du document XML selon la feuille XSL
$html = $proc->transformToXML($xml);
$html = utf8_decode($html);
//---------------------------------------------

echo $html;
Et les entête de ma feuilles XSL sont :

Code : Tout sélectionner

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
La ligne qui pose problème est :

Code : Tout sélectionner

<td class="whiteHeader">Impress&otilde;es</td>

Posté : 07 juin 2006, 19:45
par Cyrano
Il ne manquerait pas un charset dans ta balise xml ? (charset="iso-8859-1")

Posté : 07 juin 2006, 21:53
par Hubert Roksor
Mmh, si tu ne veux pas que "&otilde;" soit considéré comme une entité il te faut escaper le &. Donc ton truc devrais ressembler à :

Code : Tout sélectionner

<td class="whiteHeader">Impress&otilde;es</td>
Mais Cyrano a raison, rajouter le charset serait une bonne idée aussi. [Edit: après avoir lu le code, je pense qu'il s'agit plutôt de UTF-8] Sinon, tu pourrais je pense déclarer "&otilde" comme entité XML, mais ce serait un peu tiré par les cheveux.

PS: quelqu'un pourrait me rappeler la traduction de "to escape" pour les caractères spéciaux ?

Posté : 08 juin 2006, 09:10
par zeus
Merci de vos réponses.

Pour le charset, j'ai essayé d'ajouter le charset dans la balise <xsl:stylesheet> puis dans la balise <xsl:output> mais rien. ISO ou UTF-8

Pour echapper le &otilde; en &otilde;, j'ai l'erreur sur &amps; :?

Si vous trouvez une solution, je suis prenneur, mais en attendant ce problême à été mis de côté par l'utilisation d'un "o" simple :oops:

Posté : 08 juin 2006, 17:13
par Hubert Roksor
Ben si tu déclares le charset tu peux toujours le remplacer par la lettre en question, encodée en UTF-8. Je ne comprends pas pourquoi & enverrait une erreur d'entité, tu pourrais poster une version courte du XML et du XSL stp ?