我有一个xml如下
<feed>
<entry>
<id>4</id>
<updated>2012-11-18T16:55:54Z</updated>
<title>ASSIGNED</title>
</entry>
<entry>
<id>3</id>
<updated>2011-01-16T16:55:54Z</updated>
<title>ASSIGNED</title>
</entry>
<entry>
<id>2</id>
<updated>2014-12-01T16:55:54Z</updated>
<title>EXPIRED</title>
</entry>
<entry>
<id>1</id>
<updated>2013-01-12T16:55:54Z</updated>
<title>COMPLETED</title>
</entry>
<entry>
<id>1</id>
<updated>2012-01-09T16:55:54Z</updated>
<title>ASSIGNED</title>
</entry>
<entry>
<id>1</id>
<updated>2011-04-18T16:55:54Z</updated>
<title>COMPLETED</title>
</entry>
</feed>
我想首先用ASSIGNED排序,然后是EXPIRED,然后是COMPLETED。 如果每个类别中都有多个条目,我希望按更新值降序排序。
我可以使用xsl:sort按更新降序排序,但如何根据订单中的一组字符串{ASSIGNED,EXPIRED,COMPLETED}进行排序
感谢您的回复!
答案 0 :(得分:0)
您可以使用translate
行中的xsl:sort
将字符串“ASSIGNED”,“EXPIRED”和“COMPLETED”的第一个字符转换为简单的“1”,“2”, “3”。由于你的字符串的第一个字符是唯一的,所以它只需要;如果有两个以“A”开头的字符串会更难。
以下示例强制硬编码<feed>
(因为模板匹配本身会将其删除)并对所有其他元素使用Identity Transform。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/feed">
<feed>
<xsl:apply-templates select="entry">
<xsl:sort select="translate (title, 'AaEeCc', '112233')" />
<xsl:sort select="updated" />
</xsl:apply-templates>
</feed>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>