XSLT按两个子属性对父进行排序

时间:2017-09-25 18:20:22

标签: xml sorting xslt

我试图通过两个单独的子元素中的两个属性对父节点进行排序。具体来说,我想首先按“attack / @ pct”然后按“misc / @ pts”排序。下面是我的源代码:

<player uni="11" code="11" name="RACHEL, Devon" checkname="RACHEL,DEVON" class="JR" gp="4" ms="1">
  <attack k="14" e="1" ta="41" pct=".317"></attack>
  <set a="0" e="0" ta="2"></set>
  <serve sa="0" se="0" ta="6"></serve>
  <defense dig="3" re="2" ta="13"></defense>
  <block bs="0" ba="2" be="0" tb="2"></block>
  <misc bhe="0" pts="15.0"></misc>
</player>
<player uni="13" code="13" name="BECKMAN, Allison" checkname="BECKMAN,ALLISON" class="JR" gp="4" ms="1">
  <attack k="3" e="1" ta="4" pct=".500"></attack>
  <set a="51" e="0" ta="128"></set>
  <serve sa="0" se="0" ta="16"></serve>
  <defense dig="17" re="0" ta="0"></defense>
  <block bs="0" ba="2" be="1" tb="2"></block>
  <misc bhe="0" pts="4.0"></misc>
</player>
<player uni="2" code="2" name="MADISON, Kennedy" checkname="MADISON,KENNEDY" class="JR" gp="4">
  <attack k="14" e="7" ta="32" pct=".219"></attack>
  <set a="0" e="0" ta="3"></set>
  <serve sa="0" se="0" ta="0"></serve>
  <defense dig="3" re="0" ta="2"></defense>
  <block bs="0" ba="5" be="0" tb="5"></block>
  <misc bhe="1" pts="16.5"></misc>
</player>
<player uni="20" code="20" name="MUMMEY, Krissy" checkname="MUMMEY,KRISSY" class="SR" gp="4" ms="1">
  <attack k="12" e="4" ta="31" pct=".258"></attack>
  <set a="0" e="0" ta="1"></set>
  <serve sa="0" se="1" ta="8"></serve>
  <defense dig="5" re="0" ta="1"></defense>
  <block bs="0" ba="4" be="1" tb="4"></block>
  <misc bhe="0" pts="14.0"></misc>
</player>

基本上,我希望它能够吐出第一个玩家,即使她的misc / @ts和/ pct都没有在任何一个排序中排名第一。这是我尝试过的代码,但似乎缺少了一些东西 - 它将按第一个排序,但完全忽略第二个。

<xsl:for-each select="player">
<xsl:sort select="attack/@pct" data-type="number" order="descending"/>
<xsl:sort select="misc/@pts" data-type="number" order="descending"/>
...
</xsl:for-each>

1 个答案:

答案 0 :(得分:1)

根据您的评论,您“想要通过”misc / @ pts“对具有”攻击/ @ pct“值至少为.300的玩家进行排序。在这种情况下,表达式你想要的就是这个......

<xsl:sort select="misc[../attack/@pct &gt;= .300]/@pts" data-type="number" order="descending"/>

请注意,“。/ pct”小于.300的玩家仍会出现在输出中,没有特别的顺序,但是在超过.300的那些之后。