注释前xslt输出doctype

时间:2014-01-20 16:20:38

标签: html xml xslt doctype

我正在尝试在xslt

生成的页面中输出围绕html标记的paul irish'条件注释
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->

等等。这工作

<xsl:comment>[if lt IE 7]&gt; &lt;html class="no-js ie6"&gt; &lt;![endif]</xsl:comment> 

但不幸的是,一些解析器决定将doctype声明放在第一个真实元素之前,之后放置任何前面的xml注释。 xsltproc将doctype放在注释之前,saxon将其放在注释之后。它显然没有说明好的行为是什么,但是想要将doctype作为页面中的第一件事,期间。

简而言之,我正试图在任何评论之前找到一种方法使撒克逊输出成为doctype。任何想法?

2 个答案:

答案 0 :(得分:2)

Saxon是对的,规范很明确:在序列化结果文档时,doctype声明必须紧接在第一个元素之前。这在XSLT 1.0XSLT 2.0中指定:

  

如果指定了doctype-system属性,则xml输出方法应在第一个元素之前输出文档类型声明

要解决此问题,您可以使用doctype元素手动添加文档中的xsl:text声明,disable-output-escaping属性设置为yes。例如,您可以输出标准HTML5文档类型,而不使用任何公共标识符,否则在XSLT中无法做到这一点。

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

答案 1 :(得分:0)

最终我没有这样做..我最终在javascript中做到了

if ($.browser.msie) {
    if ($.browser.version<9) $('html').addClass('lt-ie9');
    if ($.browser.version<8) $('html').addClass('lt-ie8');
    if ($.browser.version<7) $('html').addClass('lt-ie7');

}