[XSL] Как сделать оработку элементов списка блоками по несколько раз?

#
[XSL] Как сделать оработку элементов списка блоками по несколько раз?
Подскажите, как лучше написать XSL чтобы решить такую задачу.
Есть допустим в XML 9 штук item. Как вывести их таким образом:

<tr>
<td>item1_name</td>
<td>item2_name</td>
<td>item3_name</td>
</tr>
<tr>
<td>item1_descr</td>
<td>item2_descr</td>
<td>item3_descr</td>
</tr>
<tr>
<td>item4_name</td>
<td>item5_name</td>
<td>item6_name</td>
</tr>
<tr>
<td>item4_descr</td>
<td>item5_descr</td>
<td>item6_descr</td>
</tr>
<tr>
<td>item7_name</td>
<td>item8_name</td>
<td>item9_name</td>
</tr>
<tr>
<td>item7_descr</td>
<td>item8_descr</td>
<td>item9_descr</td>
</tr>

Т.е. нужно чтобы товары обрабатывались несколько раз по 3 штуки, а затем переходили к следующей группе товаров. Что можете посоветовать в такой ситуации?
#
Re: [XSL] Как сделать оработку элементов списка блоками по несколько раз?
DOG-Paul, ответ дан по почте.
#
Re: [XSL] Как сделать оработку элементов списка блоками по несколько раз?
в конце шаблона товава вставить
<xsl:if test="position() mod 3 = 0">
         <xsl:text disable-output-escaping="yes">
            &lt;/tr&gt;
            &lt;tr valign="top"&gt;
         </xsl:text>
      </xsl:if>
Делаю сайты на HostCMS! Подробнее по почте anton.yurzanov@gmail.com
Модератор
#
Re: [XSL] Как сделать оработку элементов списка блоками по несколько раз?
Пример фрагмента шаблона, подготовленного Натальей:
<!-- Шаблон для магазина -->
<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">
&lt;/tr&gt;
&lt;tr&gt;
</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">
&lt;/tr&gt;
&lt;tr&gt;
</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>
Авторизация