3

あるドキュメントから別のドキュメントにXMLを引き継ぐことを試みていますが、そこに到達したときにコメントアウトする必要があります。だから私はこのようなことをしたい:

<xsl:template name="process">
    <figure>
        <xsl:comment>
            <xsl:copy />
        </xsl:comment>
    </figure>
</xsl:template>

ストレートJavaXSLTプロセッサーを使用して実行すると、次のような結果になります。

<figure>
<!--







  -->
  </figure>

奇妙なことに、次のように、コメントオブジェクトなしで実行すると次のようになります。

<xsl:template name="process">
    <figure>
            <xsl:copy />
    </figure>
</xsl:template>

コンテンツは問題なく通過します。

何か案は?コメントに要素を使用できないのではないかと思いましたが、調べてみたところ、問題ないはずです。

4

1 に答える 1

5

仕様(セクション7.4、コメントの作成)から、強調します。

xsl:commentのコンテンツをインスタンス化すると、テキストノード以外のノードが作成される場合はエラーになります。XSLTプロセッサがエラーを通知する場合があります。エラーの兆候がない場合は、問題のあるノードとそのコンテンツを無視して回復する必要があります。

だからあなたがそれを調べたところはどこでも、あなたの情報は間違っています。動作しないはずです。

コメント内にXMLのようなテキストを作成する必要があります。これは、使用しているXSLTプロセッサに応じて、難しいか簡単です。

たとえば、Saxonにはserialize()拡張機能があり、タスクを簡単にします。

<xsl:comment>
    <xsl:value-of select="saxon:serialize($node-set, 'default')" />
</xsl:comment>

これには、XSLTでのsaxon名前空間宣言が必要です。

<xsl:stylesheet version="2.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:saxon="http://saxon.sf.net/"
>
于 2012-12-25T03:04:38.897 に答える