我正在尝试将一些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>
内容很好。
有什么想法吗?我想也许你不能在评论中使用一个元素,但我查了一下它应该没问题。
答案 0 :(得分:5)
从规范(Section 7.4, Creating Comments)开始,强调我的:
如果实例化xsl的内容,则会出错:注释会创建除文本节点之外的节点。 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/"
>