XML / XSLT条件注释IE样式表

时间:2012-12-05 15:35:59

标签: internet-explorer xslt cross-browser conditional-comments symphony-cms

我遇到了一个我似乎无法弄清楚的问题。我不久前在HTML中构建了一个网站,并且最近集成了Symphony CMS,并且不得不将所有内容都更改为XML。

最初在我脑海中,我有一个特定于Internet Explorer的样式表,头部看起来像这样:

<head>
       <link rel="stylesheet" href="../css/master.css" type="text/css" media="screen"></link>
       <!--[if IE]>
             <link rel="stylesheet" type="text/css" href="../css/ie.css"></link>
             <script src="../js/html5shiv.js"></script>
       <![endif]-->
</head>

自切换以来,此条件评论不再有效,我已将其更改为此但不幸的是,我的master.css因Chrome / Firefox等而被忽略......它只是为所有人加载ie.css样式表浏览器。

<head>
    <link rel="stylesheet" href="../css/master.css" type="text/css" media="screen"></link>                
    <xsl:comment>[if IE]<![CDATA[><!]]></xsl:comment>
          <link rel="stylesheet" type="text/css" href="../css/ie.css"></link>
          <script src="../js/html5shiv.js"></script>
    <xsl:comment><![CDATA[<!]]>[endif]</xsl:comment>    
</head>

对不起,我对此很新,我只是不确定我做错了什么,我猜我可能需要某种xsl:如果评论但不确定如何去做。我只需要一些能使chrome / firefox / opera / safari忽略ie.css样式表的东西。

任何帮助将不胜感激!感谢

2 个答案:

答案 0 :(得分:8)

只需使用一个xsl:comment并将所有内容包装在<![CDATA[]]> ...

    <head>
        <link rel="stylesheet" href="../css/master.css" type="text/css" media="screen"></link>
        <xsl:comment><![CDATA[[if IE 6]>
         <link rel="stylesheet" type="text/css" href="../css/ie.css"></link>
         <script src="../js/html5shiv.js"></script>
   <![endif]]]></xsl:comment>
    </head> 

答案 1 :(得分:1)

使用模板允许以编程方式定义条件注释:

<xsl:template name="conditionalComment">
    <xsl:param name="qualifier" select="'IE'"/>
    <xsl:param name="contentRTF" select="''" />


    <!--Use entity variables to allow invalid XML output from an XSLT processor-->
    <xsl:comment>[if <xsl:value-of select="$qualifier"/>]<![CDATA[>]]>
    <!--Use copy-of rather than value-of to preserve tag delimiters-->
        <xsl:copy-of select="$contentRTF" />
    <!--Use CDATA to output raw characters-->
        <![CDATA[<![endif]]]></xsl:comment>

</xsl:template>

模板有两个参数:

<xsl:call-template name="conditionalComment">
    <!--Conditional check parameter-->
    <xsl:with-param name="qualifier" select="'lte IE 6'"/>
    <!--Stylesheet parameter-->
    <xsl:with-param name="contentRTF">
        &lt;link rel="stylesheet" type="text/css" href="ie-win-fixup.css" /&gt;
    </xsl:with-param>
</xsl:call-template> 

<强>参考