Пример фрагмента шаблона, подготовленного Натальей:
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
...
<table border="1">
<tr>
<xsl:apply-templates select="item[position()=1 or position()=2 or position()=3]" mode="item_name">
<xsl:with-param name="item_position" select="1"/>
</xsl:apply-templates>
</tr>
</table>
...
</xsl:template>
<xsl:template match="item" mode="item_name">
<xsl:param name="item_position" select="1"/>
<td>
<xsl:value-of disable-output-escaping="yes" select="name"/></td>
<xsl:if test="position() mod 3 = 0 or $item_position + position() - 1 = count(/shop/item)">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
<xsl:apply-templates select="/shop/item[position() = $item_position or position() = $item_position + 1 or position() = $item_position + 2]" mode="item_description">
<xsl:with-param name="item_position" select="$item_position + 3"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<xsl:template match="item" mode="item_description">
<xsl:param name="item_position" select="1"/>
<td>
<xsl:value-of disable-output-escaping="yes" select="description"/>
</td>
<xsl:if test="position() mod 3 = 0">
<xsl:text disable-output-escaping="yes">
</tr>
<tr>
</xsl:text>
<xsl:apply-templates select="/shop/item[position() = $item_position or position() = $item_position + 1 or position() = $item_position + 2]" mode="item_name">
<xsl:with-param name="item_position" select="$item_position"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>