6

如何将仅限 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 文档中使用相同的片段并且它工作正常。是什么赋予了?

4

3 回答 3

3

该注释将被解析器视为 XSL 中的注释,并将从生成的 HTML 代码中删除。

如果要在 HTML 中生成注释,则需要将其包含在CDATA块中,以便 XSL 解析器将其视为纯文本,逐字复制到目标文档。

代码如下所示:

<![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>

希望有帮助。抱歉,原来的答案不完整。

于 2012-08-03T20:46:25.937 回答
1

这是一种行之有效的方法——这是 DOE 有用的罕见情况之一

<xsl:text disable-output-escaping="yes">
        &lt;!--[if lte IE 7]>
        &lt;link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
        &lt;![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">
        &lt;!--[if lte IE 7]>
        &lt;link rel="stylesheet" type="text/css" href="/rcm/verisign/style/2012/ie7.css"/>
        &lt;![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>
于 2012-08-04T15:45:56.693 回答
-1

你有:

<!--[if lte IE 7]>

它应该是:

<!--[if lt IE 7]>
于 2012-08-03T21:14:41.457 回答