2013-05-30 18 views
0

我的XML标签包含很多应该作为三个不同的组,具有相似(但不同)排序规则的项目。XSLT 2.0 - 两步排序

这就是我想:

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

最初,项目顺序是随机的。

第一次排序应该创建这些三个不同部分:把一切是在顶部标题,也就是页脚底部的一切,并保留一切在哪里。我可以确定是否应该在标题,正文或页脚中查看其结尾(最后一个下划线后的值)。

第二种排序应该在每个部分(每页元素排序的页眉和页脚,每个组的排序正文)不同。

我知道我可以排序的头部,身体和页脚(感谢this answer),但不知道如何将它们移动,并与不同的算法进行排序。

+0

你的意思是自定义排序? –

+0

@NavinRawat我不知道如何正确调用它。也许如果我可以写一个更好的'选择'我会有三个xsl:只有一个,一个部分。 –

回答

2

假设你有一个template匹配items那么它只是分离item元素分成三组,你说你可以通过结局做的一个案例:在

<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)" /> 

,然后处理三组然而,你需要。

+0

感谢您的干净(和工作)解决方案:) –