141 votes

Définir un doctype HTML5 avec XSLT

Comment aurais-je proprement mis le doctype d'un fichier HTML5 <!DOCTYPE html> via XSLT (dans ce cas avec le collectif.xdv)

Le suivant, qui est le meilleur de mon Google foo a été en mesure de trouver:

<xsl:output
    method="html"
    doctype-public="XSLT-compat"
    omit-xml-declaration="yes"
    encoding="UTF-8"
    indent="yes" />

produit:

<!DOCTYPE html PUBLIC "XSLT-compat" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

155voto

0xA3 Points 73439

Je pense que ce n'est actuellement pris en charge par la rédaction de la déclaration comme texte:

<?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" indent="yes" />

  <xsl:template match="/">
    <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text>
    <html>
    </html>
  </xsl:template>

</xsl:stylesheet>

Cela produira la sortie suivante:

<!DOCTYPE html>
<html>
</html>

66voto

hsivonen Points 5133

L'utilisation de la simple doctype HTML <!DOCTYPE html>, vous devez utiliser l' disable-output-escaping fonctionnalité: <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>. Toutefois, disable-output-escaping est une fonctionnalité en option dans XSLT, de sorte que votre moteur XSLT ou de sérialisation pipeline peut pas le soutenir.

Pour cette raison, HTML5 offre une alternative doctype pour la compatibilité avec HTML5 n'est pas au courant XSLT versions (toutes les versions existantes de XSLT) et les autres systèmes qui ont le même problème. L'alternative doctype est - <!DOCTYPE html SYSTEM "about:legacy-compat">. À la sortie de ce document, utiliser l'attribut doctype-system="about:legacy-compat" sur le xsl:output élément sans l'aide d'un doctype-public d'attribut.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" doctype-system="about:legacy-compat"/>
   ...
   <html>
   </html>
</xsl:stylesheet>

30voto

Jim Michaels Points 453
<xsl:output
     method="html"
     doctype-system="about:legacy-compat"
     encoding="UTF-8"
     indent="yes" />

ce sorties

<!DOCTYPE html SYSTEM "about:legacy-compat">

ce est modifiée comme mon fix http://ukchill.com/technology/generating-html5-using-xslt/

21voto

stephanme Points 81

Avec Saxon 9.4 vous pouvez utiliser:

<xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />

Cela génère:

<!DOCTYPE HTML>

10voto

Jirka Kosek Points 81

Utilisation doctype-system au lieu de doctype-public

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X