XSLT2.0-两步排序

XSLT2.0-两步排序,xslt,xslt-2.0,Xslt,Xslt 2.0,我的XML标记包含许多项,它们应该被视为三个不同的组,具有相似(但不同)的排序规则 这就是我想要的: <items> <!-- Header - for-each sorting --> <item name="something1_A"/> <item name="something2_B"/> <item name="something3_C"/> <!-- Body - for-ea

我的XML标记包含许多项,它们应该被视为三个不同的组,具有相似(但不同)的排序规则

这就是我想要的:

<items>
    <!-- Header - for-each sorting -->
    <item name="something1_A"/>
    <item name="something2_B"/>
    <item name="something3_C"/>

    <!-- Body - for-each-group sorting -->
    <item name="something4_D"/>
    <item name="something4_E"/>
    <item name="something5_D"/>
    <item name="something5_E"/>

    <!-- Footer - for-each sorting -->
    <item name="something6_F"/>
    <item name="something6_G"/>
    <item name="something6_H"/>
</items>

最初,项目顺序是随机的

第一个排序应该创建这三个不同的部分:将页眉的所有内容放在顶部,将页脚的所有内容放在底部,并将其他所有内容保留在原来的位置。我可以确定是否应该在页眉、正文或页脚中查看其结尾(最后一个下划线后的值)

第二种排序在这些部分中的每一部分上的工作方式应该不同(页眉和页脚按元素排序,正文按组排序)


我知道如何对页眉、正文和页脚进行排序(感谢),但不知道如何移动它们并使用不同的算法对它们进行排序。

假设您有一个匹配
项的
模板
,那么只需将
元素分成三组,你说你可以通过结尾来做:

<xsl:variable name="headerItems" select="item[
   some $suf in ('_A', '_B', '_C') satisfies ends-with(@name, $suf)]" />
<xsl:variable name="footerItems" select="item[
   some $suf in ('_F', '_G', '_H') satisfies ends-with(@name, $suf)]" />
<xsl:variable name="bodyItems"
   select="item except ($headerItems | $footerItems)" />


然后按顺序处理这三个组。

你是说自定义排序吗?@NavinRawat我不知道如何正确调用它。也许如果我能编写一个更好的
select
,我会有三个xsl:sort-only,一个用于part。