2017-05-08 9 views
1

次のコードを使用して10日間ループしますが、日付は取得されません。私が間違ってやっている何のために任意の助けをいただければ幸いです:あなたは日付を1回の日付が別の日付以下になるまで再帰のパラメータとして日付を使用する

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    <xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
    <Hi> 
    <Start><xsl:value-of select="'Start Here'"/></Start> 

    <xsl:call-template name="DayFunction"/> 
    <End><xsl:value-of select="'End Here'"/></End> 
</Hi> 
</xsl:template> 

<xsl:template name="DayFunction"> 
    <xsl:param name="EndDate" select="2017-05-10"/> 
    <xsl:variable name="StartDate" select="2017-05-01"/> 


    <xsl:choose> 
     <xsl:when test="$EndDate >= $StartDate"> 
      <ok><xsl:value-of select="$EndDate"/></ok> 
      <xsl:call-template name="DayFunction"> 
       <xsl:with-param name="EndDate" select="$EndDate - 1"/> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <ohno><xsl:value-of select="'Stuck Here'"/></ohno> 
      </xsl:otherwise> 
     </xsl:choose> 

    </xsl:template> 
    </xsl:stylesheet> 
+0

を私は実際には、なぜ私の見しようとしているので、私は私のXMLを追加していないことに注意してください日付は正しく比較されず、減算されません。 – Derek

答えて

1

まず、:

<xsl:param name="EndDate" select="2017-05-10"/> 

あなたは、そのタイプ2011の値を持つ整数(あるパラメータを持っています= 2017-5-10)。パラメータを次のように定義してみてください。

<xsl:param name="EndDate" select="xs:date('2017-05-10')" /> 


次に、日付から数値を減算することはできません。代わりに:

<xsl:with-param name="EndDate" select="$EndDate - 1"/> 

試し:デモの作業

<xsl:with-param name="EndDate" select="$EndDate - xs:dayTimeDuration('P1D')"/> 

http://xsltransform.net/a9Giwx

+0

これから学ぶべき教訓は、変数やパラメータの型を宣言することです。 ''もしあなたがそれを済ませたら、コンパイラはあなたにエラーメッセージを与えてしまい、あなたはここに来る必要はありませんでした。 –

関連する問題