12

我想在 XSLT中创建条件注释。

但是当我使用这个时:

<!-- [If IE7] [endif] -->

在 中<xsl:comment>,XSLT 在呈现时将其从输出中删除。

有没有办法在 XSLT 中创建条件注释?

4

3 回答 3

22

只需使用<xsl:comment>标签并将您的评论包含在标签中。

例如:

<xsl:if test="@id = '1'">
  <xsl:comment>
    <![CDATA[[if IE]><![endif]]]>
  </xsl:comment>
</xsl:if>

Taming Your Multiple IE Standalones是一篇关于这个主题的好文章。

于 2009-05-02T06:11:50.880 回答
6

上述解决方案假定条件注释内的内容不包含任何 XSLT 参数。在下面的示例中,我们需要$DATA_ROOT_PATH处理一个参数,以便为我们提供 CSS 文件的正确位置。在这种情况下<xsl:comment/>是不合适的。我们必须使用<xsl:text/>和禁用输出转义。

仅当我们使用 IE7 时,此处的示例才会包含 CSS 文件。

<xsl:text disable-output-escaping="yes">&lt;!--[if IE 7]&gt;</xsl:text>
  <link rel="stylesheet" type="text/css" href="{$DATA_ROOT_PATH}/resources/css/ie7.css" media="screen"/>
<xsl:text disable-output-escaping="yes">&lt;![endif]--&gt;</xsl:text>

如果$DATA_ROOT_PATH= /example ,代码示例将生成如下输出:

<!--[if IE 7]>
  <link rel="stylesheet" type="text/css"
        href="/example/resources/css/ie7.css"
        media="screen" />
<![endif]-->
于 2010-10-07T13:15:07.617 回答
0

This was the only way I was able to get my ie stylesheet to be applied:

    <xsl:comment>[if IE]>
      &lt;link rel="stylesheet" type="text/css" href="ie.css" />
      &lt;![endif]</xsl:comment>

I had to make sure there is no space between my text and the xsl:comment opening/closing tags

于 2013-09-11T18:38:49.267 回答