2016-04-18 31 views
1

我有一個XSLT文件與意見散落如下列:禁用的xsl:在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。)

+0

有一個'use-when'屬性https://www.w3.org/TR/xslt20/#conditional-inclusion,但我認爲你需要使用XSLT 3.0和一個靜態參數來寫' ...',在XSLT 2.0中,您可以應用'use-when'屬性,但我不認爲有權訪問表達提供。 –

+0

您可能可以使用'use-when ='system-property('debug')「',但它取決於處理器是否以及如何設置您自己的系統屬性。 –

+1

另一種可能性是將第二個XSLT應用於第一個XLST的結果,該結果將XML中的所有註釋去掉。 –

回答

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> 

如果您想暫時停用評論,只需從verbose變量中刪除1變量:

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

糟糕!我只注意到你已經有了這個想法,並要求採取不同的方式。 –

+0

另外,使用result-tree-fragment變量作爲布爾值非常不禮貌。爲什麼不使用布爾變量''?依賴於RTF的boolean()爲true並且零長度字符串的boolean()爲false會造成麻煩。 –

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> 

你我甚至不指定的情況下,可讀性<xsl:output>任何indent屬性是不是一個目標。