2009-05-05 9 views
0

のために再帰的に呼び出されたテンプレートに存在し、この条件を考えてみましょう:私はXSLT 2.0プロセッサ(サクソン-B 9.1を使用してい条件は、XSLT 1.0スタイルシートのために動作しますが、ないXSLT 2.0スタイルシート

<xsl:if test="$i &lt;= $count"> 

。 0.6)。この状態は、XSLT 1.0スタイルシートを実行しているときにのみ有効です。スタイルシートのバージョンが2.0に設定されている場合、それは動作を停止します。

なぜでしょうか?

<xsl:template name="for.loop"> 
    <xsl:param name="i" /> 
    <xsl:param name="count" /> 

    <xsl:if test="$i &lt;= $count"> 
    ... 
    </xsl:if> 

    <!-- Repeat the loop by recursion --> 
    <xsl:if test="$i &lt;= $count"> 
     <xsl:call-template name="for.loop"> 
      <xsl:with-param name="i"> 
       <xsl:value-of select="$i + 1" /> 
      </xsl:with-param> 
      <xsl:with-param name="count"> 
       <xsl:value-of select="$count" /> 
      </xsl:with-param> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 

ありがとう:

は、ここで全体のことです。

答えて

1

$i$counのデータタイプによっては、1.0より多くのデータ型をサポートする2.0では "less"テストが失敗する可能性があります。1.0では暗黙の変換が存在します。正しいこと。

データを比較する前に正しいタイプに変換してください。 number()を使用してください。

+0

それを修正しました。私は2回目のテストでnumber($ count)を使用しました。なぜそのテストのうちの1つだけが変更を必要とするのか不思議です。 – Jonathan

+0

両方のテストで実際に変更が必要だと思います。あなたはチェックしましたか?条件を否定すると(test = "$ count > $ i")、あなたに知らせてください。 – Tomalak

+0

test = "$ count > = $ i"の両方の条件を逆にしました。これはnumber関数なしでも機能します。どうしたの? – Jonathan

関連する問題