Xml 如何用IE条件注释XSLT转换XHTML文档?

Xml 如何用IE条件注释XSLT转换XHTML文档?,xml,internet-explorer,xslt,xhtml,conditional-comments,Xml,Internet Explorer,Xslt,Xhtml,Conditional Comments,我使用XSLT将一个XHTML文档转换为另一个XML文档。 在XHTML输入文档中有几个IE条件注释,如下所示: <!--[if lte IE 7]> <link rel='stylesheet' href='ie.css' type='text/css' /> <![endif]--> 但是当他们迷失在转型中。。。 即使我只尝试进行身份复制: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.

我使用XSLT将一个XHTML文档转换为另一个XML文档。 在XHTML输入文档中有几个IE条件注释,如下所示:

<!--[if lte IE 7]>
<link rel='stylesheet' href='ie.css' type='text/css' />
<![endif]-->

但是当他们迷失在转型中。。。 即使我只尝试进行身份复制:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" />

    <xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

我只得到link元素,周围没有条件注释

如何使用条件注释复制XHTML文档

即使我只尝试进行身份复制:

我只知道 链接元素,但周围没有条件注释

如果这是真的(我对此表示怀疑),那么您使用的是一个有缺陷的XSLT处理器。如果没有适当的XSLT指令(在与
comment()
匹配的模板中),任何兼容的XSLT处理器都不会删除注释并生成注释文本

当然,我无法重现这个“问题”,因为我尝试了6-7种不同的XSLT处理器进行此转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

当应用于此XML文档时(注释封装在单个顶部元素中,成为格式良好的XML文档):


结果与XML文档完全相同

<html>
  <!--[if lte IE 7]> <link rel='stylesheet' href='ie.css' type='text/css' /> <![endif]-->
</html>
<html>
<!--[if lte IE 7]> <link rel="stylesheet" href="ie.css" type="text/css"/> <![endif]-->
</html>

话虽如此,生成这样的“评论”有点棘手——下面是一个演示:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" omit-xml-declaration="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <html>
       <xsl:text disable-output-escaping="yes">&#xA;&lt;!--[if lte IE 7]> </xsl:text>
       <link rel='stylesheet' href='ie.css' type='text/css' />
       <xsl:text disable-output-escaping="yes"> &lt;![endif]-->&#xA;</xsl:text>
     </html>
 </xsl:template>
</xsl:stylesheet>


--[如果lte IE 7]>
![endif]-->
;
当此转换应用于任何XML文档(在我们的示例中未使用)时,将生成所需的正确输出

<html>
  <!--[if lte IE 7]> <link rel='stylesheet' href='ie.css' type='text/css' /> <![endif]-->
</html>
<html>
<!--[if lte IE 7]> <link rel="stylesheet" href="ie.css" type="text/css"/> <![endif]-->
</html>

我只得到link元素,周围没有条件注释。-我对此表示怀疑。对于XSLT来说,整个过程都是一个注释,它不会只复制其中的一部分。您的错误在别处,而不在您发布的代码中@托马拉克有权利。