0

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 のみを使用することが重要です。

4

1 に答える 1

2

テーブルを生成するコードを別のテンプレートに配置する必要があります。

<xsl:template match="/">
    <table>
      <tr>
    <xsl:apply-templates select="/products/product">
        <xsl:sort select="populariteit" order="descending" data-type="number"/>
    </xsl:apply-templates>
      </tr>
    </table>
</xsl:template>

<xsl:template match="product">
    <xsl:if test="position() &lt; 3">

                <td>
                    <xsl:value-of select="title"/>
                </td>
    </xsl:if>
</xsl:template>

これにより、各タイトルが独自のセルに配置されます。すべてを 1 つのセルに入れたい場合は、td結果要素を他のテンプレートにも移動し、テンプレートのタイトルのみを出力する必要がありますproduct

于 2012-12-04T11:26:41.270 に答える