使用日期作为递归的参数,直到1个日期小于或等于另一个日期

时间:2017-05-08 23:11:36

标签: xml xslt xpath

我试图使用以下代码循环播放10天,但日期没有进行。对于我做错的任何帮助都将不胜感激:

    <?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>

1 个答案:

答案 0 :(得分:1)

首先,当你这样做时:

if ( pNewStackItem )

你有一个类型为 integer 的参数,其值为2011(= 2017 - 5 - 10)。尝试将参数定义为:

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

代替。

接下来,您无法从日期中减去数字。而不是:

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

尝试:

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

工作演示:http://xsltransform.net/a9Giwx