この質問は前のスレッドから続きます: XSLT:他のノードからの値の合計に基づくソート
これで、キーを使用して他のノードからデータを合計できます。私が取得できないように見えるのは、これらのキーを使用しているときに、必要なデータを選択するための条件を適用するために必要な構文またはメソッドです。
これが私が使用している単純化されたxmlです(問題を強調するために最後のものから変更されました):
<Horses>
<Horse>
<ID>1</ID>
<Name>hrsA</Name>
<SireID>101</SireID>
<Age>3</Age>
<Pace>
<Stakes>20</Stakes>
<Wins>0</Wins>
</Pace>
</Horse>
<Horse>
<ID>2</ID>
<Name>hrsB</Name>
<SireID>101</SireID>
<Age>6</Age>
<Pace>
<Stakes>1600</Stakes>
<Wins>9</Wins>
</Pace>
</Horse>
<Horse>
<ID>3</ID>
<Name>hrsC</Name>
<SireID>101</SireID>
<Age>3</Age>
<Trot>
<Stakes>200</Stakes>
<Wins>2</Wins>
</Trot>
</Horse>
<Horse>
<ID>4</ID>
<Name>hrsD</Name>
<SireID>101</SireID>
<Age>4</Age>
<Pace>
<Stakes>50</Stakes>
<Wins>0</Wins>
</Pace>
<Trot>
<Stakes>100</Stakes>
<Wins>1</Wins>
</Trot>
</Horse>
<Horse>
<ID>5</ID>
<Name>hrsE</Name>
<SireID>101</SireID>
<Age>3</Age>
<Pace>
<Stakes>100</Stakes>
<Wins>1</Wins>
</Pace>
<Trot>
<Stakes>300</Stakes>
<Wins>1</Wins>
</Trot>
</Horse>
</Horses>
<Sires>
<Sire>
<ID>101</ID>
<Name>srA</Name>
<LiveFoalsALL>117</LiveFoalsALL>
</Sire>
</Sires>
あるシナリオでは、特定の年齢の1つの父に属する子孫(馬)を取得する必要があります。
年齢が指定されていないので、私はそのように勝った賭け金でソートするキーを使用します(Dimitreに感謝します):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kOffspring" match="Horse" use="SireID"/>
<xsl:template match="/*">
<xsl:apply-templates select="Sires/Sire">
<xsl:sort select="sum(key('kOffspring', ID)/*/Stakes)"
data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Sire">
<!-- get the data I want -->
</xsl:template>
</xsl:stylesheet>
さて、「必要なデータを取得する」では、3歳の馬のみを取得しようとしています(年齢= 3)たとえば、srAの3歳の勝利の子孫のみを取得するには(回答= 2)次のようなものが必要です考えている:
<xsl:value-of select="count(key('kOffspring', ID)[Age=3]/*/Wins)"/>
しかし、それは機能しません...または、次のような条件付き構文(?)で使用する年齢ごとに新しいキーを作成する必要がありますか?
<xsl:key name="kOffspring" match="Horse[/Age=3]" use="SireID"/>
ご覧のとおり、私は自分が何をしているのか、それが可能かどうかさえわかりません:-)
。
同様の流れの他のシナリオは、勝者だった馬の数を数える必要があります-answer = 4(勝ちの数ではなく、ペースで勝ったか速歩で勝ったかだけです... 3番目のシナリオでは、ペースだけまたは速歩で勝った必要があります)。
私はこれをSireテンプレートで試しました:
<xsl:value-of select="count(key('kOffspring', ID)/*/Wins > 0)"/>
しかし、それは1のカウントを返すだけです。
ここにいる専門家が私を動かすのを手伝ってくれるなら、私はそれをいただければ幸いです。xslt構文は、他のプログラミング言語と比較して少し混乱し、覚えにくいと感じています。非常に強力なので、すぐに使用できるようになることを願っています。
よろしく、ブライスステンバーグ。