在XSLT转换中禁用xsl:comment

时间:2016-04-18 09:00:16

标签: xslt xslt-2.0

我有一个散落着以下评论的XSLT文件:

<xsl:comment>Entering shipping block</xsl:comment>

有没有办法明确禁用这些注释,以便它们不会在生产中的运行时输出? XSLT文件的输出显示在公共API中,因此虽然它对调试很有用,但我宁愿能够将其关闭。

我能想到的唯一方法是在开发模式中设置一个标志来打开注释:

<xsl:if test="$enableDebug='true'">
    <xsl:comment>Entering shipping block</xsl:comment>
</xsl:if>

还有其他办法吗?

(我正在使用XSLT 2.0。)

2 个答案:

答案 0 :(得分:1)

只需在部署到生产中包含此转换步骤:

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="comment()"/>
</xsl:stylesheet>

我甚至没有在indent上指定任何<xsl:output>属性,以防可读性不是目标。

答案 1 :(得分:0)

您可以在XSL的最顶部声明​​变量verbose

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
    <xsl:variable name="verbose">1</xsl:variable>
    <xsl:template match="@*|node()">
        <xsl:copy>
        ...

并将您的评论包装在<xsl:if>中,如下所示:

<xsl:if test="$verbose">
    <xsl:comment>Applying the template...</xsl:comment>
</xsl:if>

如果您想暂时停用评论,只需从1变量中移除verbose

<xsl:variable name="verbose"></xsl:variable>