2010-12-10 23 views
36

我正在写XSL,我想在整个代码中做出评论,当它被处理时会被剥离,比如PHP,但是我不知道如何。如何评论XSLT而不是HTML

我知道评论对象,但它处理时会打印出HTML注释。 :\

<xsl:comment>comment</xsl:comment> 

回答

81

您可以使用标准的XML注释:

<!-- Comment --> 

这些不是由XSLT转换处理。

+0

+1正确答案。 – 2010-12-10 16:00:00

+0

完美!谢谢。 – 2010-12-10 16:10:22

-1

当然。阅读http://www.w3.org/TR/xslt#built-in-rule然后应明白为什么这个简单的样式表(嗯,应该)你想要什么:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="comment()"> 
    <xsl:copy/> 
</xsl:template> 

<xsl:template match="text()|@*"/> 

</xsl:stylesheet> 

尝试:

<xsl:template match="/"> 
    <xsl:for-each select="//comment()"> 
    <SRC_COMMENT> 
    <xsl:value-of select="."/> 
    </SRC_COMMENT> 
    </xsl:for-each> 
</xsl:template> 
or use a <xsl:comment ...> instruction for a more literal duplication of the source  document content in place of my <SRC_COMMENT> tag. 
11

只要确保你把你的<!-- comments -->AFTER开放XML声明(如果你使用一个,你真的不需要):

游:

<!-- a comment --> 
<?xml version="1.0"?> 

WORKS:

<?xml version="1.0"?> 
<!-- a comment --> 

我划伤了我的脑袋上同样的问题了一下,同时调试别人的XSLT ......似乎是显而易见的,但容易被忽视。

2

请注意,注释两边的空白可能会在输出流中结束,具体取决于您的XSLT处理器及其处理空白的设置。如果这是您输出的问题,请确保评论被xslt标签括起来。

EG

<xsl:for-each select="someTag"> 
    <xsl:text>"</xsl:text> 
    <!-- output the id --> 
<xsl:value-of select="@id"/> 
<xsl:text>"</xsl:text> 
</xsl:for-each> 

会输出 “someTagID”(缩进选项卡/在注释标记前面的空格是输出)。 若要删除,无论它与左边距齐平,或者将其括起来就像

<xsl:text>"</xsl:text><!-- output the id --><xsl:value-of select="@id"/>