我正处于XSL的学习阶段。我面临一个问题,我需要根据日期对元素进行排序。输入XML包含列表。列表中的每个对象都包含一个复杂对象。我需要根据复杂对象中的元素对列表进行排序。
例如
<list>
<object>
<date>2011-10-05<date/>
</object>
</list>
<list>
<object>
<date>2011-10-04<date/>
</object>
</list>
<list>
<object>
<date>2011-10-08<date/>
</object>
</list>
我需要根据日期对xml进行排序。有可能吗?请帮忙。
答案 0 :(得分:0)
是的,你可以。
您可以使用多个xsl:sort元素,以便使用多个条件对选择进行排序。
以下1.0 XSLT转换:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="root/list">
<xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 1, 4)"/>
<xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date), 6, 2)"/>
<xsl:sort data-type="number" order="ascending" select="substring(normalize-space(object/date),9, 2)"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
当应用于.xml文件时,我根据你的错误输入提出了:
<?xml version="1.0" encoding="utf-8"?>
<root>
<list>
<object>
<date>
2011-10-05
</date>
</object>
</list>
<list>
<object>
<date>
2011-10-04
</date>
</object>
</list>
<list>
<object>
<date>
2011-10-08
</date>
</object>
</list>
</root>
将产生以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<list>
<object>
<date>
2011-10-04
</date>
</object>
</list>
<list>
<object>
<date>
2011-10-05
</date>
</object>
</list>
<list>
<object>
<date>
2011-10-08
</date>
</object>
</list>
</root>
我首先根据年份然后按月分类,最后按日分类。当然,您可以根据自己的需要改变排序顺序。
我希望我能解决你的问题:)