我正在尝试在xslt
生成的页面中输出围绕html标记的paul irish'条件注释<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
等等。这工作
<xsl:comment>[if lt IE 7]> <html class="no-js ie6"> <![endif]</xsl:comment>
但不幸的是,一些解析器决定将doctype声明放在第一个真实元素之前,之后放置任何前面的xml注释。 xsltproc将doctype放在注释之前,saxon将其放在注释之后。它显然没有说明好的行为是什么,但是想要将doctype作为页面中的第一件事,期间。
简而言之,我正试图在任何评论之前找到一种方法使撒克逊输出成为doctype。任何想法?
答案 0 :(得分:2)
Saxon是对的,规范很明确:在序列化结果文档时,doctype
声明必须紧接在第一个元素之前。这在XSLT 1.0和XSLT 2.0中指定:
如果指定了doctype-system属性,则xml输出方法应在第一个元素之前输出文档类型声明。
要解决此问题,您可以使用doctype
元素手动添加文档中的xsl:text
声明,disable-output-escaping
属性设置为yes
。例如,您可以输出标准HTML5文档类型,而不使用任何公共标识符,否则在XSLT中无法做到这一点。
<xsl:text disable-output-escaping="yes"><!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');
}