2012-12-25 48 views
3

我试图从一个文档继承一些XML到另一个,但我希望它在它到达时被注释掉。所以,我想要做这样的事情:XSLT注释标记不输出内容?

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

内容通过就好了。

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

回答

5

从一规范(Section 7.4, Creating Comments),重点煤矿:

,如果实例XSL的内容是错误的:注释创建一个比文本节点的其他节点。 XSLT处理器可能会发出错误信号;如果它没有指示错误,则必须通过忽略违规节点及其内容来恢复。

因此,无论你看着它,你的信息是错误的。它不应该工作。

您将不得不在注释中创建看起来像 XML的文本。这要么很困难,要么很容易,具体取决于您使用的XSLT处理器。

撒克逊例如具有serialize()扩展功能,这使得琐碎的任务:

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

这需要在你的XSLT撒克逊命名空间声明:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:saxon="http://saxon.sf.net/" 
> 
+0

+1的一个很好的答案。祝你节日快乐! :) –

+0

谢谢@Dimitre。你也是! – Tomalak

+0

这绝对解决了这个谜团。非常感谢,Tomalak! – NickChase