3

日付「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>

上記のコードは、月と年の最後の日にも検証を適用するロジックを見つけることができないため、出力に失敗しています。

私が得ている間違った出力は、すべての場合で「////」です。

4

1 に答える 1

0

2 つの問題:

1) 変数を参照する場所は 2 つあり$relementますが、引用符で囲みます '$relement'。これは$relement、変数を参照する代わりにリテラル文字列 " " を使用しています。

2011-12-31T24:00:00Z2)で始まる行の最後に一見ランダムな日付があります<xsl:when test="contains($time,'24:00:00Z')">

動作するバージョンについては、このXSLTCakeデモを参照してください。

于 2014-10-01T19:58:14.257 に答える