Xml XSLT:如何对日期进行排序
我有一个关于排序日期和时间的问题 我找到了一个解决方案,但这个解决方案对我不起作用 假设我有一个xml。日期顺序为月、日和年Xml XSLT:如何对日期进行排序,xml,sorting,xslt,Xml,Sorting,Xslt,我有一个关于排序日期和时间的问题 我找到了一个解决方案,但这个解决方案对我不起作用 假设我有一个xml。日期顺序为月、日和年 <persons> <person> <name>1</name> <birthday>021514</birthday> </person> <person> <name>2</name> <b
<persons>
<person>
<name>1</name>
<birthday>021514</birthday>
</person>
<person>
<name>2</name>
<birthday>051513</birthday>
</person>
</persons>
但我想要的实际结果是
021514
051513
只有第一种有效。其余的都不起作用了。
这个代码怎么了?任何帮助都将不胜感激。只需更改排序条件的顺序。
你应该按年、按月、按日开始
<xsl:for-each select="//person">
<!-- year -->
<xsl:sort select="substring(birthday, 5, 2)" order="descending" data-type="number"/>
<!-- month -->
<xsl:sort select="substring(birthday, 1, 2)" order="descending" data-type="number"/>
<!-- day -->
<xsl:sort select="substring(birthday, 3, 2)" order="descending" data-type="number"/>
<xsl:value-of select="birthday"/>
</xsl:for-each>
如果您有使用MMDDYY作为日期格式的XML,那么它就是设计糟糕的XML,处理设计糟糕的XML最好的方法是在执行任何其他操作之前在预处理阶段将其清理干净。编写一个样式表,其唯一目的是将XML清理成更好的内容,然后将转换任务作为一个单独的处理阶段来考虑 在本例中,您希望以ISO格式YYYY-MM-DD创建日期。我不确定推断世纪的规则是什么,但我将编写如下内容(需要XSLT 2.0):
与你打交道的人都不到14岁吗?
021514
051513
<xsl:for-each select="//person">
<!-- year -->
<xsl:sort select="substring(birthday, 5, 2)" order="descending" data-type="number"/>
<!-- month -->
<xsl:sort select="substring(birthday, 1, 2)" order="descending" data-type="number"/>
<!-- day -->
<xsl:sort select="substring(birthday, 3, 2)" order="descending" data-type="number"/>
<xsl:value-of select="birthday"/>
</xsl:for-each>
<xsl:template match="birthday">
<xsl:copy>
<xsl:variable name="year" select="substring(., 5, 2)"/>
<xsl:variable name="month" select="substring(., 1, 2)"/>
<xsl:variable name="day" select="substring(., 3, 2)"/>
<xsl:value-of select="if (number($year) gt 20 then '19' else '20'"/>
<xsl:value-of select="$year, $month, $day" separator="-"/>
</xsl:copy>
</xsl:template>