在 xslt 1.0 中标记和比较日期
Tokenize and compare dates in xslt 1.0
我在 xslt1.0 中有一个变量,它包含带有分隔符的日期
“;2015 年 8 月 11 日 11:16;2015 年 8 月 7 日 08:27;2015 年 8 月 12 日 15:14”
我想标记这个变量值并获取最新日期并将其存储在变量中。谁能帮帮我。
Xalan 支持 EXSLT str:tokenize() 函数,所以它会解决这个问题。之后,您只需要按各个日期和时间组件对标记进行排序,然后抓住最后一个。
<xsl:for-each select="str:tokenize($dates, ';')">
<!-- sort by year -->
<xsl:sort select="substring(., 9, 4)"/>
<!-- sort by month -->
<xsl:sort select="string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec', substring(., 1, 3)))" data-type="number"/>
<!-- sort by day -->
<xsl:sort select="substring(., 5, 2)"/>
<!-- sort by time -->
<xsl:sort select="substring(., 14, 4)"/>
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
请注意,如果您的日期格式不完全相同(在您输入的最后一个日期中,月和日之间没有 space),这将不起作用。
我在 xslt1.0 中有一个变量,它包含带有分隔符的日期 “;2015 年 8 月 11 日 11:16;2015 年 8 月 7 日 08:27;2015 年 8 月 12 日 15:14” 我想标记这个变量值并获取最新日期并将其存储在变量中。谁能帮帮我。
Xalan 支持 EXSLT str:tokenize() 函数,所以它会解决这个问题。之后,您只需要按各个日期和时间组件对标记进行排序,然后抓住最后一个。
<xsl:for-each select="str:tokenize($dates, ';')">
<!-- sort by year -->
<xsl:sort select="substring(., 9, 4)"/>
<!-- sort by month -->
<xsl:sort select="string-length(substring-before('JanFebMarAprMayJunJulAugSepOctNovDec', substring(., 1, 3)))" data-type="number"/>
<!-- sort by day -->
<xsl:sort select="substring(., 5, 2)"/>
<!-- sort by time -->
<xsl:sort select="substring(., 14, 4)"/>
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
请注意,如果您的日期格式不完全相同(在您输入的最后一个日期中,月和日之间没有 space),这将不起作用。