use*_*111 6 css xslt conditional-comments internet-explorer-7
如何将仅限IE7和更低版本的样式表添加到XSL页面?我尝试将其添加到模板中以获取标题信息,如下所示:
<xsl:template name="header">
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
并且条件永远不会在我的文档中执行,即使我在HTML-only文档中使用相同的片段并且它工作正常.是什么赋予了?
该注释将被解析器视为 XSL 中的注释,并将从生成的 HTML 代码中删除。
如果您想在 HTML 中生成注释,则需要将其包含在一个CDATA块中,这样 XSL 解析器就会将其视为纯文本,并逐字复制到目标文档。
代码如下所示:
<![CDATA[
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
]]>
Run Code Online (Sandbox Code Playgroud)
<![CDATA[和之间的所有内容都]]>将被视为纯文本。
希望这能回答你的问题。
然而,如果可能的话,我建议最好的解决方案是放弃对 IE7 的支持。在过去六个月左右的时间里,它的使用统计数据已经跌破谷底——现在几乎和 IE6 一样低;几乎没有人还在使用它。我理解在某些情况下你可能没有选择,但如果你确实有选择,我的建议是放弃它。
[编辑]
好吧,经过进一步的研究,看来你是对的:一个普通的CDATA块确实逃脱了它的输出(尽管在很多地方都有相反的说法)。
相反,您需要使用<xsl:comment>在输出中生成 HTML 注释。使用条件注释语法执行此操作会变得非常混乱,并且您可能仍然需要使用 CDATA。
我能找到的最好的例子在这里:http ://getsymphony.com/download/xslt-utilities/view/21798/
正如您所看到的,代码量相当多。
简短的版本(没有灵活性)可能如下所示:
<xsl:comment>
[if lte 7<![CDATA[>]]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![CDATA[<![endif]]]>
</xsl:comment>
Run Code Online (Sandbox Code Playgroud)
希望有帮助。抱歉,原来的答案不完整。