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>

内容通过就好了。

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

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