Xslt 通过自定义字符串值在父级之前对嵌套节点进行排序
Xslt sorting nested nodes before parent by custom string values
<?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>
我也在尝试按照我想要的方式进行排序……我想按 Lorry ABC、SUV IX 和 Jeep 进行排序……我正在使用
<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)"/>
但我意识到,在一个 staffID 有多种类型的情况下,它似乎无法正确排序。所以我想看看我是否可以先对子笔记进行排序,然后再使用我上面的<xsl:sort>
?
但我是 xslt 的新手,一直在尝试解决它,但没有成功 - 任何建议都将不胜感激……
如果我猜对了 (!),你想做的是:
<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>
<?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>
我也在尝试按照我想要的方式进行排序……我想按 Lorry ABC、SUV IX 和 Jeep 进行排序……我正在使用
<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)"/>
但我意识到,在一个 staffID 有多种类型的情况下,它似乎无法正确排序。所以我想看看我是否可以先对子笔记进行排序,然后再使用我上面的<xsl:sort>
?
但我是 xslt 的新手,一直在尝试解决它,但没有成功 - 任何建议都将不胜感激……
如果我猜对了 (!),你想做的是:
<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>