我使用XSLT将XHTML文件转换为另一个XML-Dokument。 在XHTML-Input-Dokument中有几个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-element。
如何使用条件注释复制XHTML-Dokument?
答案 0 :(得分:2)
即使我只尝试进行身份证复制:
...
我只得到了 link-element没有围绕它的条件注释。
如果这是真的,我怀疑,那么你正在使用一个非常有缺陷的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">
<!--[if lte IE 7]> </xsl:text>
<link rel='stylesheet' href='ie.css' type='text/css' />
<xsl:text disable-output-escaping="yes"> <![endif]-->
</xsl:text>
</html>
</xsl:template>
</xsl:stylesheet>
当此转换应用于任何XML文档(在我们的示例中未使用)时,会生成所需的正确输出:
<html>
<!--[if lte IE 7]> <link rel="stylesheet" href="ie.css" type="text/css"/> <![endif]-->
</html>