如何将仅限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>
条件永远不会在我的文档中执行,即使我在仅HTML文档中使用相同的代码段并且它工作正常。是什么给了什么?
答案 0 :(得分:3)
解析器将把注释看作是XSL中的注释,并将从生成的HTML代码中删除。
如果要在HTML中生成注释,则需要将其括在CDATA
块中,因此XSL解析器会将其视为纯文本,逐字复制到目标文档。< / p>
代码如下所示:
<![CDATA[
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
]]>
<![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>
希望有所帮助。抱歉原来的答案不完整。
答案 1 :(得分:1)
这是一种行之有效的方法 - 这是DOE有用的极少数情况之一:
<xsl:text disable-output-escaping="yes">
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
</xsl:text>
完整示例:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/*">
<xsl:text disable-output-escaping="yes">
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
</xsl:text>
<p>
Done.
</p>
</xsl:template>
</xsl:stylesheet>
当对任何XML文档(未使用)应用此转换时,会生成所需的正确结果:
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
<![endif]-->
<p>
Done.
</p>
答案 2 :(得分:-1)
你有:
<!--[if lte IE 7]>
应该是:
<!--[if lt IE 7]>