Bonjour,
Je consulte la communauté pour procéder à une petite vérification : est-ce que l'accès à nodeValue entraîne une conversion des entités après transformation XSL ? Par exemple, soit ce bête fichier XML :
1 2
| <?xml version="1.0" encoding="iso-8859-1"?>
<input><</input> |
Et soit cette bête feuille de styles :
1 2 3 4 5 6 7 8
| <?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="input">
<output>
<xsl:value-of select="." />
</output>
</xsl:template>
</xsl:stylesheet> |
Et maintenant ce bête code PHP qui procède à la conversion et qui affiche le contenu de la balise <output> à l'issue de la transformation :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <html>
<body>
<?php
$xmlDocument = new DOMDocument ();
$xmlDocument->load ("test.xml");
$xmlStylesheet = new DOMDocument ();
$xmlStylesheet->load ("test.xsl");
$xslTransfom = new XSLTProcessor ();
$xslTransfom->importStylesheet ($xmlStylesheet);
$xmlDocument = $xslTransfom->transformToDoc ($xmlDocument);
echo ($xmlDocument->documentElement->firstChild->nodeValue);
?>
</body>
</html> |
Surprise : on trouve "<" en sortie au lieu de "<". L'entité a donc été convertie. Cela n'aurait survenir que si j'avais précisé l'attribut disable-output-escaping.
D'ailleurs, si jamais je décide d'afficher le contenu du document résultant de la transformation en passant par saveXML (), j'obtiens bien "<" :
echo ($xmlDocument->saveXML ());
me retourne :
Quelqu'un a-t-il une explication ? Merci d'avance !
Partager