Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting XSLT-按自定义字符串集排序_Sorting_Xslt - Fatal编程技术网

Sorting XSLT-按自定义字符串集排序

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

我有一个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>

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']
,并按正确的顺序进行排序。(从内存来看,确切的语法可能需要一些修改。)