我想在 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 来生成此输出,这一点很重要。