🙆♀️
XSLT3のHTML5出力で「meta http-equiv」を出さない方法
XSLT 3.0では、@html-version
へ5などを指定することでHTML5出力ができます。@html-version
の数値解釈は実際のところ処理系依存です。
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL" version="3.0">
<xsl:output method="html" html-version="5.0"/>
...
</xsl:transform>
ただし、これで現代的なHTMLが書けるかというと罠があります。
Saxon-HE 11で確認する限り、こいつは<head>
内にお気持ちを自動挿入する。
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" >
</head>
もし自分で<meta charset="UTF-8"/>
をテンプレートに記述していた場合、両方が出力されinvalidなHTMLが生成されてしまいます。
解決策
<xsl:output method="html" html-version="5.0" include-content-type="no"/>
ということで、 @include-content-type
で挿入を抑制し、テンプレートには<meta charset="UTF-8"/>
を書いたままにすればよいです。
xsl:output/@encoding
にUTF-8以外を指定したり入力ではまた違うエンコーディング使ったりといった無茶苦茶やる場合はこれでは対処できないかもしれませんが。
参考資料
Discussion