2017-05-08 76 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

您應該從中學到的教訓是聲明變量和參數的類型,例如''。如果你這樣做了,編譯器會給你一個錯誤信息,你不需要來這裏尋求幫助。 –