この質問は、クエリXSLTに続きます。他のノードからの値の合計に基づく並べ替え
私はこのxslt(Demitreのおかげで)を持っています。これは、値「P」(ペース)、「T」(トロット)、または「A」(すべて)を持つことができるパラメーター「Gait」を受け取るように変更しました。
<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:param name="Gait"/>
<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">
Sire <xsl:value-of select="concat(ID,' (', Name, ') Stakes: ')"/>
<xsl:value-of select="sum(key('kOffspring', ID)/*/Stakes)"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
上記のコードにはこの部分があります
sum(key('kOffspring', ID)/*/Stakes
歩行に渡された値に応じて、アスタリスク部分をxmlツリーのノードの名前に置き換える方法はありますか?
超簡略化されたxmlは次のとおりです。
<t>
<Horses>
<Horse>
<ID>5</ID>
<Name>hrsE</Name>
<SireID>101</SireID>
<Pace>
<Stakes>100</Stakes>
</Pace>
<Trot>
<Stakes>300</Stakes>
</Trot>
</Horse>
</Horses>
<Sires>
<Sire>
<ID>101</ID>
<Name>srA</Name>
<LiveFoalsALL>117</LiveFoalsALL>
</Sire>
</Sires>
</t>
$Gaitが'A'の場合 、sum(key('kOffspring'、ID)/ * / Stakes (Horseのすべてのサブノードを調べます)が必要です
$Gaitが'P'の場合 、sum(key('kOffspring'、ID)/ Pace / Stakes(Stakesを見つけるにはPaceノードのみを調べてください)が必要です
$Gaitが'T'の場合 、sum(key('kOffspring'、ID)/ Trot / Stakes(TrotノードでStakesを見つけるだけです)が必要です
したがって、これは非常に単純化された例です。$ Gaitのさまざまな値に対応するために、100行のコードを複製する必要をなくそうとしています。変数を使用してみましたが、パスでキーを使用しているときにノードパスの値を変更する方法がわかりませんでした。'match = "/ *"'テンプレートでchooseステートメントを使用できる可能性があることを確認しましたが、これは並べ替え専用であり、'Sire'テンプレートに到達したときにスタックしていました。私が持っている多数の「value-ofselect」ステートメントの周りで「select」を選択します。
提案をありがとう。よろしく、ブライスステンバーグ。