XSLT注释标签不会输出内容吗?

3

我想将一个XML从一个文档转移到另一个文档,但是当它到达时我希望它被注释掉。因此,我想做这样的事情:

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

当我使用纯Java XSLT处理器运行它时,我会得到类似于以下内容的东西:
<figure>
<!--







  -->
  </figure>

奇怪的是,如果我不使用注释对象运行它,就像这样:
<xsl:template name="process">
    <figure>
            <xsl:copy />
    </figure>
</xsl:template>

内容传输完好无损。

有什么想法吗?我觉得可能不能在注释中使用<p>元素,但是我查了一下,应该是可以的。

1个回答

5
从规范中可以看到(第7.4节,Creating Comments),强调如下:
“如果实例化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/"
>

谢谢@Dimitre。你也一样! - Tomalak
那绝对解决了这个谜团。非常感谢你,Tomalak! - NickChase
@NickChase 注意XML注释不能嵌套。如果您的输入XML包含注释节点,并将其通过serialize()传递,将结果放入另一个注释中,则可能会得到非法的XML。 - Tomalak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接