2017-09-25 92 views
-1

我想通過兩個獨立子元素內的兩個屬性對父節點排序。具體而言,我想通過「攻擊/ @ PCT」,然後通過「雜項/ @點」第一排序下面是我的源代碼:XSLT通過兩個子項屬性排序父項

<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也不會攻擊/ @ 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> 
+0

在您的示例數據中,每個對於'attack/@ p'具有不同的值ct'。因此第二個排序鍵與這些數據無關。 –

+0

如果您想將數據按照出現的順序排序,那麼確定訂單的實際標準是什麼?我想'attack/@ pct'和'misc/@ pts'的一些組合;在這種情況下,它是您想要作爲排序鍵的*組合*。 –

+0

我想按攻擊/ @ pct進行排序,然後在該排序中,按misc/@ pts進行排序。基本上我所遇到的情況是,得分最高的球員並不總是最有效率的 - 這意味着一個有兩到三個點的球員可能會有更高的進攻/效率。也許有些地方是通過攻擊/ @ pct進行排序,同時爲misc/@ pts定義最小值(大於)? – wnoble13

回答

1

根據您的意見,你「希望有一個球員排序‘’由至少.300值‘雜項/ @點攻擊/ @ PCT’。在這種情況下,你的表達要的就是這個...

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

注意,用「攻擊/ @ PCT」小於.300仍然會出現在輸出中,沒有特定的順序,但是那些經過那些超過.300球員。

+0

工作。謝謝!我有一種感覺,我在正確的軌道(有點),但不能完全弄清楚我自己。 – wnoble13