Bonjour,
Voilà ce qui m'amène aujourd'hui : J'ai simplifié les bases de mon code pour faire un test
dont la page principale (qui se trouve ici) contient le code suivant:
Code php:
Ce code appelle le fichier suivant (code sans importance, car non utilisé dans le cas de ce test):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php $xslDoc = new DOMDocument(); $xslDoc->load("Test_doctype.xsl"); $xmlDoc = new DOMDocument(); $xmlDoc->load("ENREGISTREMENTS_XML_ESSAI.xml"); $proc = new XSLTProcessor(); $proc->importStylesheet($xslDoc); echo $proc->transformToXML($xmlDoc); ?>
Fichier XML:
pour le parser à l'aide du code XSLT suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="UTF-8"?> <enregistrements> <auteur> <ressource titre="Un titre super important"> <regroupement sous_titre="Titre du regroupement"> <ligne>Mon 1er texte <plus>Bonjour !</plus> </ligne> </regroupement> </ressource> </auteur> </enregistrements>
Le Doctype utilisé ici pour le fichier XSLT est de type HTML 4.01;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?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 HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/> <xsl:template match="/"> <html> <head> <title>Test</title> </head> <body> <p>Image sympatique: <img style="position:absolute; width:125px; height:94px" src="http://souffle56.ovh.org/Site/Tests/Interactivite_et_height/Image_js_css/m-Dauphins.jpg" alt="Dauphins"/> </p> </body> </html> </xsl:template> </xsl:stylesheet>
Or, si j'ai bien compris, pour qu'un navigateur puisse lire correctement un fichier de type HTML, les balises <img> étant auto-fermantes, elles doivent être écrites sans </img> et sans "/" à la fin de <img ...>
Dans le cas de mon programme, ça donnerait:
Or, si je l'écris ainsi dans le fichier XSLT, à l'arrivée, coté navigateur, celui-ci n'arrive pas à l'afficher correctement: série de messages d'erreur de type
Code : Sélectionner tout - Visualiser dans une fenêtre à part <img style="position:absolute; width:125px; height:94px" src="http://souffle56.ovh.org/Site/Tests/Interactivite_et_height/Image_js_css/m-Dauphins.jpg" alt="Dauphins">
Par contre, si je rajoute le fameux "/" évoqué à la fin de la balise <img>, comme cela:...Opening and ending tag mismatch: img line 16...
-> là, le navigateur affiche bien la page correctement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part <img style="position:absolute; width:125px; height:94px" src="http://souffle56.ovh.org/Site/Tests/Interactivite_et_height/Image_js_css/m-Dauphins.jpg" alt="Dauphins"/>
D'ailleurs, le code source de la page navigateur affiche (pour la balise <img>):
-> il y a bien une balise <img> sans "/"
Code : Sélectionner tout - Visualiser dans une fenêtre à part <img style="position:absolute; width:125px; height:94px" src="http://souffle56.ovh.org/Site/Tests/Interactivite_et_height/Image_js_css/m-Dauphins.jpg" alt="Dauphins">
Et si on utilise le validateur officiel, voilà ce qu'il affiche: "This document was successfully checked as HTML 4.01 Transitional!"
Autrement dit, il semblerait que le fichier PHP utilisé ici pour parser le fichier XML via le fichier XSLT joue bien son rôle de parseur, et que le fichier généré est bien reçu par le navigateur comme "valide HTML4.01" (-> avec la balise <img ...> sans "/")...
mais seulement si, dans le fichier XSLT, la balise image est de la forme <img .../> (-> à l'inverse des spécifications W3C pour le HTML !)
Y aurait-il quelque chose à revoir dans mon code ou dans mon approche pour parser le fichier XML ? Qu'en pensez-vous
Partager