フットボール リーグ テーブルを表示するための xml フィードがあります。テーブルをフィルタリングして、特定の 1 つのチームとその上下に可変数のエントリのみを表示できるようにしたいと考えています。
たとえば、24 チームのリーグのうち、チーム A と上位 3 チームと下位 3 チームを表示したいのですが、現在 xsl を使用してデータをフォーマットしていますが、これを行う方法がわかりません。それはxslでもありますか?
「特定のチーム」を選択したら、position()を使用してアイテムの数を制限し、次の兄弟軸と前の兄弟軸を使用して近くのアイテムを選択できます。
簡単な例を次に示します。
この XML ドキュメント (すべての要素が「チーム」を表す) を作成してみましょう。ドキュメントは 10 チームすべてを表し、既にポイントで並べ替えられています。
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
<num>05</num>
関心のあるチームが次の変換で表される場合:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vgivenTeam"
select="/*/*[. = 5]"/>
<xsl:template match="/">
<xsl:copy-of select=
"$vgivenTeam
| $vgivenTeam/preceding-sibling::*[not(position() > 3)]
| $vgivenTeam/following-sibling::*[not(position() > 3)]
"/>
</xsl:template>
</xsl:stylesheet>
上記の XML ドキュメントに適用すると、必要な結果が生成されます。指定されたチームの前にある 3 つのチーム、指定されたチームの前にある 3 つのチーム、および指定されたチームに続く 3 つのチームです。
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>