0

我想在 HTML 表格中显示 XML 内容。我使用以下(简化的)代码来执行此操作:

<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>

它的作用是按“流行度”对列表进行排序,然后从表中的第一个条目(最受欢迎)中显示标题。

现在,我想要完成的是显示前两个热门项目的标题。但无论我尝试什么,XSLT 都会将它们输出到两个不同的表中,而不是一个

我试过这样的事情:

<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>

但这会导致两个不同的表;我希望标题在同一张表中彼此相邻显示,同时仍使用排序列表中的信息

我想要的 HTML 输出是:

<table>
    <tr>
        <td>
            Title Three Title Two
        </td>
    </tr>
</table>

由于我使用的软件存在某些限制,因此我只使用一个 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>

这会将每个标题放在自己的单元格中,如果您希望全部在一个单元格中,则还需要将td结果元素向上移动到另一个模板,并且只在模板中输出product.

于 2012-12-04T11:26:41.270 回答