[XSLT] intrepretation des entites HTML

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juin 2006, 10:44

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>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

07 juin 2006, 19:45

Il ne manquerait pas un charset dans ta balise xml ? (charset="iso-8859-1")
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

07 juin 2006, 21:53

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juin 2006, 09:10

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:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

08 juin 2006, 17:13

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 ?