2016-04-18 7 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

もう1つの可能性は、XMLからのすべてのコメントを取り除く最初のXLSTの結果に2番目のXSLTを適用することです。 –

答えて

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で、長さ0の文字列が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属性を指定しない目標ではありません。