我想在XSLT中创建conditional comments。
但是当我使用它时:
<!-- [If IE7] [endif] -->
在<xsl:comment>
中,XSLT在渲染时将其从输出中删除。
有没有办法在XSLT中创建条件注释?
答案 0 :(得分:21)
只需使用<xsl:comment>
标记,并在标记中包含您的评论。
例如:
<xsl:if test="@id = '1'">
<xsl:comment>
<![CDATA[[if IE]><![endif]]]>
</xsl:comment>
</xsl:if>
Taming Your Multiple IE Standalones是关于此主题的精彩文章。
答案 1 :(得分:6)
上述解决方案假定条件注释内的内容不包含任何XSLT参数。在下面的示例中,我们有一个参数$DATA_ROOT_PATH
,应该对其进行处理,以便为我们提供CSS文件的正确位置。在这种情况下,<xsl:comment/>
不合适。我们必须使用<xsl:text/>
并禁用输出转义。
此处的示例仅在我们使用IE7时才包含CSS文件。
<xsl:text disable-output-escaping="yes"><!--[if IE 7]></xsl:text>
<link rel="stylesheet" type="text/css" href="{$DATA_ROOT_PATH}/resources/css/ie7.css" media="screen"/>
<xsl:text disable-output-escaping="yes"><![endif]--></xsl:text>
如果$DATA_ROOT_PATH
= / example ,代码示例将生成如此输出:
<!--[if IE 7]>
<link rel="stylesheet" type="text/css"
href="/example/resources/css/ie7.css"
media="screen" />
<![endif]-->
答案 2 :(得分:0)
这是我能够应用我的样式表的唯一方法:
<xsl:comment>[if IE]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]</xsl:comment>
我必须确保我的文本与xsl:comment打开/关闭标记之间没有空格