使用XSL对列表进行排序

时间:2011-10-14 22:34:08

标签: xslt

我正处于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进行排序。有可能吗?请帮忙。

1 个答案:

答案 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>

我首先根据年份然后按月分类,最后按日分类。当然,您可以根据自己的需要改变排序顺序。

我希望我能解决你的问题:)