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

发布于 2024-12-11 05:22:20 字数 692 浏览 0 评论 0原文

我使用 XSLT 将一个 XHTML 文档转换为另一个 XML 文档。 在 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>

我也只获得链接元素,而没有周围的条件注释。

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

I transform a XHTML dokument to another XML-Dokument with XSLT.
In the XHTML-Input-Dokument there are several IE-conditional-comments, like this one:

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

But while the transformation they get lost...
Even if I try only to do an identity-copy:

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

I only get the link-element without the conditional comment around it.

How can I copy the XHTML-Dokument with the conditional comment?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守望孤独 2024-12-18 05:22:20

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

...

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

如果这是真的(我对此表示怀疑),那么您使用的是一个有很多错误的 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 文档):

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

话虽如此,生成这样的“注释”有点棘手 -- 这是一个演示如何做this:

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

Even if I try only to do an identity-copy:

...

I only get the
link-element without the conditional comment around it.

If this is true, which I doubt, then you are using a very buggy XSLT processor. No compliant XSLT processor will strip out a comment and produce the comment text -- without having the appropriate XSLT instructions (within a template matching comment()).

Of course, I couldn't reproduce this "problem" having tried 6-7 different XSLT processors with this transformation:

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

When applied on this XML document (the comment, wrapped in a single top element to become a well-formed XML document):

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

the result is exactly the same XML document:

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

Having said that, to generate such a "comment" is a little bit more tricky -- here is a demo how to do this:

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

When this transformation is applied to any XML document (not used in our example), the wanted, correct output is produced:

<html>
<!--[if lte IE 7]> <link rel="stylesheet" href="ie.css" type="text/css"/> <![endif]-->
</html>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文