XSLT注释标记不输出内容?

Nic*_*ase 3 xml xslt

我正在尝试将一些XML从一个文档转移到另一个文档,但我希望它在到达时被注释掉.所以我想做这样的事情:

<xsl:template name="process">
    <figure>
        <xsl:comment>
            <xsl:copy />
        </xsl:comment>
    </figure>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

当我使用直接的Java XSLT处理器运行它时,我会得到以下内容:

<figure>
<!--







  -->
  </figure>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我在注释对象中运行它,如:

<xsl:template name="process">
    <figure>
            <xsl:copy />
    </figure>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

内容来得很好.

有任何想法吗?我想也许你不能在评论中使用一个元素,但我查了一下它应该没问题.

Tom*_*lak 5

从规范(第7.4节,创建评论)开始,强调我的:

如果实例化xsl的内容,则会出错:comment会创建除文本节点之外的节点.XSLT处理器可能会发出错误信号; 如果它没有发出错误信号,它必须通过忽略违规节点及其内容来恢复.

所以无论你在哪里查找它,你的信息都是错误的.它不应该工作.

您必须在注释中创建看起来像 XML的文本.这很难或很容易,具体取决于您使用的XSLT处理器.

例如,Saxon具有serialize()扩展功能,这使得任务变得微不足道:

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

这需要在XSLT中使用saxon名称空间声明:

<xsl:stylesheet version="2.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:saxon="http://saxon.sf.net/"
>
Run Code Online (Sandbox Code Playgroud)