无法放置格式化日期

时间:2013-08-20 10:32:24

标签: xslt xslt-1.0

我正在尝试实现格式规则,其中我有一个日期为“1918-12-31T24:00:00Z”的输入字符串,我需要将其显示为“1/1/1918”。在代码下面实现:

请注意,值relement =“1918-12-31T24:00:00Z”或类似格式。

    <xsl:choose> 
            <xsl:when test="not($relement)"/>
            <xsl:when test="$relement = ''"/>
            <xsl:otherwise>
                <xsl:variable name="rdate" select="substring-before('$relement','T')"/>
                <xsl:variable name="month" select="substring-before(substring-after($rdate,'-'),'-')"/>                                       
                <xsl:variable name="day" select="substring-after(substring-after($rdate,'-'),'-')"/>  
                <xsl:variable name="year" select="substring-before($rdate,'-')"/>
                <xsl:variable name="time" select="substring-after('$relement','T')"/>                 

                <xsl:variable name="lastdate">  
                <xsl:choose>
                <xsl:when test="$month = 2 and not($year mod 4) and ($year mod 100 or not($year mod 400))">
                    <xsl:value-of select="29"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="substring('312831303130313130313031', 2 * $month - 1,2)"/>
                </xsl:otherwise>
                </xsl:choose>
                </xsl:variable>

                <xsl:variable name="dayadj">
                <xsl:choose>
                <xsl:when test="contains($time,'24:00:00Z')">  2011-12-31T24:00:00Z
                    <xsl:value-of select="$day + '1'"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$day"/>
                </xsl:otherwise> 
                </xsl:choose>  
                </xsl:variable>
                <xsl:variable name="finaldate">
                <xsl:choose>
                <xsl:when test="$dayadj > $lastdate and ($month = 12)">
                    <xsl:value-of select="concat('1','/','1','/',$year + '1')"/>
                </xsl:when>
                <xsl:when test="$dayadj > $lastdate and ($month != 12)">
                    <xsl:value-of select="concat($month + '1','/','1','/',$year)"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="concat($month,'/',$dayadj,'/',$year)"/>
                </xsl:otherwise>
                </xsl:choose>
                </xsl:variable> 
          <xsl:attribute name="internal"><xsl:value-of select="$arg1/@internal"/></xsl:attribute>
                <xsl:value-of select="$finaldate"/> 
        </xsl:otherwise>
</xsl:choose>

上面的代码无法提供输出,因为我无法找到在月份和年份的最后一天应用验证的逻辑。

我得到的错误输出是:“////”在所有情况下。

1 个答案:

答案 0 :(得分:0)

两个问题:

1)您可以在两个地方引用$relement变量,但引用它为'$relement'。这是使用文字字符串&#34; $relement&#34;而不是引用变量。

2)在2011-12-31T24:00:00Z

开头的行尾,看似随机的日期<xsl:when test="contains($time,'24:00:00Z')">

有关正常工作的版本,请参阅此XSLTCake演示。