我有一个包含以下内容的xml。我想根据相关时间的值对作业进行排序。
对于每个作业,有一个相关时间,其中两个值为Num1和Num2
我想按这些值排序,所以如果:
job1的time1的值为Num1 = 10,Num2 = 12和
job2具有时间2,其值为Num1 = 10,Num2 = 11
输出应该是:job2,job1。
如果job3的time3值为Num1 = 11,则Num2 = 09
输出应该是:job2,job1,job3。
我可以用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>
答案 0 :(得分:0)
我不确定为什么你也会问关于分组,以及可以做的交叉引用和排序
<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>