XML コンテンツを HTML テーブルに表示したいと考えています。そのために、次の(簡略化された)コードを使用します。
<xsl:template match="/">
<xsl:apply-templates select="/products/product">
<xsl:sort select="populariteit" order="descending" data-type="number"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="product">
<xsl:if test="position()=1">
<table>
<tr>
<td>
<xsl:value-of select="title"/>
</td>
</tr>
</table>
</xsl:if>
</xsl:template>
次の (簡略化された) XML を使用します。
<products>
<product>
<title>Title One</title>
<popularity>250</popularity>
</product>
<product>
<title>Title Two</title>
<popularity>500</popularity>
</product>
<product>
<title>Title Three</title>
<popularity>400</popularity>
</product>
</products>
それは、リストを「人気度」でソートし、表の最初のエントリ (最も人気のあるもの) からタイトルを表示することです。
ここで達成したいのは、最初の 2 つの人気アイテムのタイトルを表示することです。しかし、何を試しても、XSLT はそれらを 1 つではなく 2 つの異なるテーブルに出力します。
私は次のようなことを試しました:
<xsl:template match="product">
<table>
<tr>
<td>
<xsl:if test="position()=1">
<xsl:value-of select="title"/>
</xsl:if>
<xsl:if test="position()=2">
<xsl:value-of select="title"/>
</xsl:if>
</td>
</tr>
</table>
</xsl:template>
しかし、その結果、2 つの異なるテーブルが作成されます。並べ替えられたリストの情報を使用しながら、タイトルを同じテーブルに並べて表示したい。
私の希望する HTML 出力は次のようになります。
<table>
<tr>
<td>
Title Three Title Two
</td>
</tr>
</table>
私が使用しているソフトウェアには特定の制限があるため、この出力を生成するために 1 つの XSL のみを使用することが重要です。