Xml Xslt按自定义字符串值排序父级之前的嵌套节点

Xml Xslt按自定义字符串值排序父级之前的嵌套节点,xml,sorting,xslt,xslt-1.0,Xml,Sorting,Xslt,Xslt 1.0,我也在试着按我想要的方式分类……我想用ABC卡车、SUV IX和吉普车分类……我用的是 <?xml version="1.0" encoding="UTF-8" ?> <DriverRights> <STAFF> <EmpDetails> <StaffID>123456789</StaffID> <Type>Lorry ABC</Type> </EmpDetails> <EmpDet

我也在试着按我想要的方式分类……我想用ABC卡车、SUV IX和吉普车分类……我用的是

<?xml version="1.0" encoding="UTF-8" ?>
<DriverRights>
<STAFF>
<EmpDetails>
<StaffID>123456789</StaffID>
<Type>Lorry ABC</Type>
</EmpDetails>
<EmpDetails>
<StaffID>123456789</StaffID>
<Type>Jeep</Type>
</EmpDetails>
</STAFF>
</DriverRights>
<DriverRights>
<STAFF>
<EmpDetails>
<StaffID>7899878887</StaffID>
<Type>Lorry ABC</Type>
</EmpDetails>
<EmpDetails>
<StaffID>7899878887</StaffID>
<Type>SUV IX</Type>
</EmpDetails>
<EmpDetails>
<StaffID>7899878887</StaffID>
<Type>Jeep</Type>
</EmpDetails>
</STAFF>
</DriverRights>
<DriverRights>
<STAFF>
<EmpDetails>
<StaffID>5432101235</StaffID>
<Category>Jeep</Category>
</EmpDetails>
</STAFF>
</DriverRights>
但我意识到,在一个有多种类型的标记的地方,它似乎没有正确分类。所以我想看看我是否可以先给孩子们的笔记排序,然后再使用我上面的


但是我对xslt还不熟悉,并且一直在尝试解决它,但没有成功-如果我猜的话,任何建议都将不胜感激…

!正确地说,您希望执行以下操作:

<xsl:sort data-type="number" order="ascending"
     select="((STAFF/EmpDetails/Type='Lorry ABC') * 1)+ 
     ((STAFF/EmpDetails/Type=='SUV IX') * 2)+ 
     ((STAFF/EmpDetails/Type=='Jeep') * 3)"/>

请在此处查看:。请解释正在排序的节点。在父节点之前排序嵌套节点并不意味着什么。如果一个标记有多种类型,正确的结果是什么?我不知道数字4和2*。*好吧,他们说这个世界上有10种类型的人:懂二进制的人和不懂二进制的人。是的,是的…我只是觉得像我做的那样有1,2,3…等就足以将文本值设置为数字权重,所以任何数字都可以,只要在这种情况下。。。他们的人数减少了。4,2,1,0,-2…等。未获得“Lorry ABC”驾照的驾驶员可获得的最高分数为3分,SUV为2分,吉普车为1分。因此,下一个系数必须是4。类似地,在当前安排下,驾驶员可以获得的最高分数是7 4+2+1,因此下一个系数必须是8,以此类推。
<xsl:apply-templates select="DriverRights">
    <xsl:sort data-type="number" order="descending"
              select="4*(STAFF/EmpDetails/Type='Lorry ABC') 
              + 2*(STAFF/EmpDetails/Type='SUV IX') 
              + (STAFF/EmpDetails/Type='Jeep')"/>
</xsl:apply-templates>