Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT通过两个子属性对父属性进行排序_Xml_Sorting_Xslt - Fatal编程技术网

Xml XSLT通过两个子属性对父属性进行排序

Xml XSLT通过两个子属性对父属性进行排序,xml,sorting,xslt,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>

我试图在两个独立的子元素中按两个属性对父节点进行排序。具体来说,我想先按“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/@pts和attack/@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>

...

根据您的评论,您“希望通过“misc/@pts”对“attack/@pct”值至少为.300的玩家进行排序”。在这种情况下,您需要的表达式是

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


请注意,具有“攻击/@pct”的玩家“小于.300的值仍将显示在输出中,没有特定的顺序,但在大于.300的值之后。

在您的示例数据中,每个值都有一个不同的
attack/@pct
值。因此,第二个排序键与此数据无关。如果要将数据排序为显示的顺序,那么确定顺序的实际标准是什么?我猜是
attack/@pct
misc/@pts
的组合;在这种情况下,它就是您想要作为排序键的组合。我想按attack/@pct排序,然后在该排序中按misc/@pts排序。从本质上说,我遇到的是,得分最多的玩家并不总是最有效率的——这意味着得分少两三分的玩家可能会有更高的攻击/@pct。也许是在攻击/ @ PCT的同时定义MISC/@ PTS的最小值(大于)的例子?例如:如果勒布朗·詹姆斯在25次投篮得分38分,而Steph Curry在15次投篮得分30分,谁会被认为更有效率?你真的说你想按每分球的平均分来排序吗?因此,平均每场得分2分的Steph Curry在勒布朗·詹姆斯之前排名,平均1.52分。非常感谢。我有一种感觉,我是在正确的轨道上(有点),但不能完全明白我自己。