Set HTML5 doctype with XSLT
To use the simple HTML doctype <!DOCTYPE html>
, you have to use the disable-output-escaping
feature: <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
. However, disable-output-escaping
is an optional feature in XSLT, so your XSLT engine or serialization pipeline might not support it.
For this reason, HTML5 provides an alternative doctype for compatibility with HTML5-unaware XSLT versions (i.e. all the currently existing versions of XSLT) and other systems that have the same problem. The alternative doctype is <!DOCTYPE html SYSTEM "about:legacy-compat">
. To output this doctype, use the attribute doctype-system="about:legacy-compat"
on the xsl:output
element without using a doctype-public
attribute at all.
<?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>
I think this is currently only supported by writing the doctype out as text:
<?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'><!DOCTYPE html></xsl:text>
<html>
</html>
</xsl:template>
</xsl:stylesheet>
This will produce the following output:
<!DOCTYPE html>
<html>
</html>