我正忙于一些 XSLT 的东西,想每 3 个项目开始一个新行。我想我可以做一个 if 语句并测试位置 mod 3,以确定我是表格中的第一个还是最后一个单元格。
以下 if 语句确实有效,但是 Copernica(我在其中使用 XSLT 的工具)不接受以下 XSLT。原因是 <tr>
未在 if 语句中关闭。
我正在寻找一种方法来处理在 3 个项目之后分成几行的产品 Feed。
<xsl:if test="position() mod 3 = 1">
<tr>
</xsl:if>
最佳答案
我假设您会使用另一个 <xsl:if/>
稍后在您的代码中关闭 <tr/>
.不幸的是,虽然这在另一种编程语言中有效,但在 xslt 中却无效。
XSLT 不是一种过程性或命令式语言,因此不要将其作为一种语言使用。相反,您可以这样做:
<xsl:template match="element[position() mod 3 = 1]">
<tr>
<xsl:apply-templates mode="single" select=".|following-sibling::element[not(position() > 2)]"
/>
</tr>
</xsl:template>
<xsl:template match="element" mode="single">
<td>
<!--your stuff between rows here-->
</td>
</xsl:template>
<xsl:template match="element[not(position() mod 3 = 1)]"/>
所以这基本上每三行创建一个 tr,另外调用另一个模板来处理这些行之间的元素。 "element"应该是你要处理的元素。
关于html - 如果基于位置,则在 XSLT 中进行 HTML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087129/