Sorting XSLT-按自定义字符串集排序
我有一个xml,如下所示Sorting XSLT-按自定义字符串集排序,sorting,xslt,Sorting,Xslt,我有一个xml,如下所示 <feed> <entry> <id>4</id> <updated>2012-11-18T16:55:54Z</updated> <title>ASSIGNED</title> </entry> <entry> <id>3</id> <updated>2011-0
<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>
4.
2012-11-18T16:55:54Z
分配
3.
2011-01-16T16:55:54Z
分配
2.
2014-12-01T16:55:54Z
期满
1.
2013-01-12T16:55:54Z
完整的
1.
2012-01-09T16:55:54Z
分配
1.
2011-04-18T16:55:54Z
完整的
我想先按分配排序,然后按过期排序,然后按完成排序。
如果每个类别中有多个条目,我想按更新的值降序排序
我可以使用xsl:sort按updated降序排序,但是如何根据一组字符串{赋值、过期、完成}按顺序排序呢
感谢您的回复 您可以在
xsl:sort
行中使用translate
,将字符串“ASSIGNED”、“EXPIRED”和“COMPLETED”的第一个字符转换为简单的“1”、“2”、“3”。由于字符串的第一个字符是唯一的,这就是所需要的;如果有两个以“A”开头的字符串,则难度会更大
下面的示例强制使用硬编码的
(因为模板匹配本身会将其删除),并对所有其他元素使用标识转换
<?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>
可能需要使用XSL标记。您的回复会更顺利。@Rick:[xsl]会自动映射到[xslt]。@Jongware:在我发表评论时,它只标记了[sorting]。谢谢Jongware,它工作得很好!你能告诉我如果标题有一个共同的首字母怎么办?像ASSGN、ASSXP、ASSGP和我一样,我想按{ASSXP、ASSGN、ASSGP}对更大范围的字符串进行排序,这些字符串不能简单地转换为数字,就像这里一样,我可能会依次对每个单词使用select=“entry[.='ASSXP']
,并按正确的顺序进行排序。(从内存来看,确切的语法可能需要一些修改。)