[XSLT] Parsage XML via XSLT, comment être valide W3C ?
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:
Code:
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);
?> |
Ce code appelle le fichier suivant (code sans importance, car non utilisé dans le cas de ce test):
Fichier XML:
Code:
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> |
pour le parser à l'aide du code XSLT suivant:
Code:
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> |
Le Doctype utilisé ici pour le fichier XSLT est de type HTML 4.01;
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 ...>
:fleche: Dans le cas de mon programme, ça donnerait:
Code:
<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">
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
Citation:
...Opening and ending tag mismatch: img line 16...
Par contre, si je rajoute le fameux "/" évoqué à la fin de la balise <img>, comme cela:
Code:
<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"/>
-> là, le navigateur affiche bien la page correctement...
D'ailleurs, le code source de la page navigateur affiche (pour la balise <img>):
Code:
<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">
-> il y a bien une balise <img> sans "/"
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 !)
:fleche: Y aurait-il quelque chose à revoir dans mon code ou dans mon approche pour parser le fichier XML ? Qu'en pensez-vous :question: