【问题标题】:How to XSLT-Transform a XHTML-Dokument with IE-conditional-comments?如何使用 IE 条件注释对 XHTML 文档进行 XSLT 转换?
【发布时间】:2011-12-13 13:49:20
【问题描述】:

我使用 XSLT 将一个 XHTML 文档转换为另一个 XML 文档。 在 XHTML-Input-Dokument 中有几个 IE-conditional-cmets,比如这个:

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

我只得到没有条件注释的链接元素。

如何复制带有条件注释的 XHTML 文档?

【问题讨论】:

  • 我只得到链接元素而没有围绕它的条件注释。 - 我对此表示怀疑。对于 XSLT,整个 是注释,它不会只复制其中的一部分。
  • 您的错误存在于其他地方,而不是您发布的代码中。 @Tomalak 是对的。

标签: xml internet-explorer xslt xhtml conditional-comments


【解决方案1】:

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

...

我只得到 没有条件注释的链接元素。

如果这是真的,我对此表示怀疑,那么您使用的 XSLT 处理器有很多问题。没有兼容的 XSLT 处理器会去掉注释并生成注释文本——没有适当的 XSLT 指令(在匹配 comment() 的模板内)。

当然,我无法重现这个“问题”,我尝试了 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 文档):

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

结果是完全相同的 XML 文档

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

当将此转换应用于任何 XML 文档(在我们的示例中未使用)时,会生成所需的正确输出

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2014-11-24
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多