Jon*_*ley 133 xslt html5 doctype xhtml-transitional xdv
如何通过XSLT 将文件的doctype 干净地设置为HTML5 <!DOCTYPE html>(在本例中为collective.xdv)
以下是我最好的谷歌foo能够找到的:
<xsl:output
method="html"
doctype-public="XSLT-compat"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="yes" />
Run Code Online (Sandbox Code Playgroud)
生产:
<!DOCTYPE html PUBLIC "XSLT-compat" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)
Dir*_*mar 147
我认为目前只有将doctype写成文本才能支持:
<?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>
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
<!DOCTYPE html>
<html>
</html>
Run Code Online (Sandbox Code Playgroud)
hsi*_*nen 65
要使用简单的HTML文档类型<!DOCTYPE html>,您必须使用以下disable-output-escaping功能:<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>.但是,它disable-output-escaping是XSLT中的可选功能,因此您的XSLT引擎或序列化管道可能不支持它.
出于这个原因,HTML5提供了另一种doctype,用于兼容HTML5-unaware XSLT版本(即所有当前存在的XSLT版本)和其他具有相同问题的系统.替代doctype是<!DOCTYPE html SYSTEM "about:legacy-compat">.要输出此doctype,请doctype-system="about:legacy-compat"在xsl:output元素上使用该属性,而不使用任何doctype-public属性.
<?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>
Run Code Online (Sandbox Code Playgroud)
Jim*_*els 30
<xsl:output
method="html"
doctype-system="about:legacy-compat"
encoding="UTF-8"
indent="yes" />
Run Code Online (Sandbox Code Playgroud)
这个输出
<!DOCTYPE html SYSTEM "about:legacy-compat">
Run Code Online (Sandbox Code Playgroud)
这被修改为我对http://ukchill.com/technology/generating-html5-using-xslt/的修复
小智 19
使用Saxon 9.4,您可以使用:
<xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
Run Code Online (Sandbox Code Playgroud)
这会产生:
<!DOCTYPE HTML>
Run Code Online (Sandbox Code Playgroud)
Jir*_*sek 10
使用doctype-system而不是doctype-public
你必须,如果你想用HTML5 XHTML输出一致的使用XHTML 1.0严格的DOCTYPE,libxml2的的XML序列化器具有通过XHTML 1.0的doctype,确保输出触发的特殊输出模式是XHTML兼容,(例如,<br />而不是<br/>,<div></div>而非<div/>).doctype-system="about:legacy-compat"也不会触发此兼容模式
如果您对html输出感到满意,那么设置<xsl:output method="html">应该做正确的事情.然后你可以设置doctype <xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>,虽然这需要在适当的地方进行管道,因为XDV还不支持这个.
实际上它似乎<xsl:output method="html"/>并没有真正帮助 - 这将导致<br/>输出为<br></br>.
这种变化尔卡Kosek的建议,通过先进XDV主题化的Plone.org似乎为我工作collective.xdv.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
doctype-public="HTML"
doctype-system=""/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
这是一个评论,但我没有足够的业力点将它放在正确的位置.叹.
我很欣赏这可能是正确的,标准驱动的方式来实现我想要的东西(我已经赞成了它).但前者不受支持(我的处理器失效),后者仍然在我的doctype 中产生" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ".正如@Jirka Kosek所说,我认为我的XSLT处理器可能已损坏.
不,你的XSLT处理器没有损坏,只是XDV增加了:
<xsl:output method="xml" indent="no" omit-xml-declaration="yes" media-type="text/html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
默认情况下,所以当你添加一秒时<xsl:output doctype-system="about:legacy-compat"/>,前一个doctype-public不会被覆盖.
请注意,XHTML 1.0 strict被列为过时的允许doctype字符串,因此使用此doctype并将其称为HTML5是完全可以接受的.
| 归档时间: |
|
| 查看次数: |
77677 次 |
| 最近记录: |