Xml XSLT:使用多个值对键进行排序和分组
我有一个包含以下内容的xml。我想根据相关时间的值对工作进行排序 对于每个作业,都有一个具有两个值Num1和Num2的相关时间。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>
我想按这些值排序,因此如果:
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)。每个作业只与一次相关。