Xml XSLT:使用多个值对键进行排序和分组

Xml XSLT:使用多个值对键进行排序和分组,xml,sorting,xslt,xslt-1.0,grouping,Xml,Sorting,Xslt,Xslt 1.0,Grouping,我有一个包含以下内容的xml。我想根据相关时间的值对工作进行排序 对于每个作业,都有一个具有两个值Num1和Num2的相关时间。 我想按这些值排序,因此如果: job1的time1的值为Num1=10、Num2=12和 job2的time2的值为Num1=10,Num2=11 输出应该是:job2,job1。 如果job3的time3的值为Num1=11,Num2=09 输出应为:作业2、作业1、作业3。 我能用xsl 1.0做到这一点吗 <Corp> <Type>

我有一个包含以下内容的xml。我想根据相关时间的值对工作进行排序

对于每个作业,都有一个具有两个值Num1和Num2的相关时间。
我想按这些值排序,因此如果:
job1的time1的值为Num1=10、Num2=12和
job2的time2的值为Num1=10,Num2=11 输出应该是:job2,job1。
如果job3的time3的值为Num1=11,Num2=09
输出应为:作业2、作业1、作业3。
我能用xsl 1.0做到这一点吗

<Corp>
 <Type>
   <Class IRI="Jobs"/>
   <Name IRI="Job1"/>
 </Type>
 <Type>
   <Class IRI="Times"/>
   <Name IRI="Time1"/>
 </Type>
 <Relation>
   <RelClass IRI="Job-Time"/>
   <Name IRI="Job1"/>
   <Name IRI="Time1"/>
 </Relation>
 <Data>
   <DataClass IRI="Num1"/>
   <Name IRI="Time1"/>
   <Value>10</Value>
 </Data>
 <Data>
   <DataClass IRI="Num2"/>
   <Name IRI="Time1"/>
   <Value>12</Value>
 </Data>

 <Type>
   <Class IRI="Jobs"/>
   <Name IRI="Job2"/>
 </Type>
 <Type>
   <Class IRI="Times"/>
   <Name IRI="Time2"/>
 </Type>
 <Relation>
   <RelClass IRI="Job-Time"/>
   <Name IRI="Job2"/>
   <Name IRI="Time2"/>
 </Relation>
 <Data>
   <DataClass IRI="Num1"/>
   <Name IRI="Time2"/>
   <Value>10</Value>
 </Data>
 <Data>
   <DataClass IRI="Num2"/>
   <Name IRI="Time2"/>
   <Value>11</Value>
 </Data>    
 </Corp>

10
12
10
11

我不知道您为什么还要询问分组,以及可以按如下方式进行的交叉引用和排序

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:key name="rel" match="Relation[RelClass/@IRI = 'Job-Time']" use="Name[1]/@IRI"/>

    <xsl:key name="num1" match="Data[DataClass/@IRI = 'Num1']" use="Name/@IRI"/>
    <xsl:key name="num2" match="Data[DataClass/@IRI = 'Num2']" use="Name/@IRI"/>

    <xsl:template match="/Corp">
        <xsl:copy>
            <xsl:apply-templates select="Type[Class/@IRI = 'Jobs']">
                <xsl:sort select="key('num1', key('rel', Name/@IRI)/Name[2]/@IRI)/Value" data-type="number"/>
                <xsl:sort select="key('num2', key('rel', Name/@IRI)/Name[2]/@IRI)/Value" data-type="number"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Type[Class/@IRI = 'Jobs']">
        <xsl:copy-of select="."/>
    </xsl:template>

</xsl:stylesheet>

您有一个元素
,它不在任何地方使用,因为所有
数据
元素都有
。因此,要么我不理解输入数据的结构(您需要解释哪些元素表示作业、哪些时间、它们之间的关系),要么您的输入示例不一致。哎呀,我的糟糕!我编辑了xml。第二部分的所有时间都是Time2(对于Job2)。每个作业只与一次相关。