2

XSLT を使用して、XHTML ドキュメントを別の XML ドキュメントに変換します。XHTML-Input-Dokument には、次のような IE 条件付きコメントがいくつかあります。

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

しかし、変換中にそれらは失われます... ID コピーだけを実行しようとしても:

<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-Dokument をコピーするにはどうすればよいですか?

4

1 に答える 1

2

ID コピーのみを実行しようとしても、次のようになります。

...

条件付きコメントなしでリンク要素のみを取得します。

これが本当なら、私には疑わしいですが、あなたは非常にバグのある 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>
于 2011-10-23T15:08:02.530 に答える