XSL - цикл for
from: RU.XML (Alexey Valikov)
Цикл что-ли? От 1 до 4?
Два основных способа - рекурсия и итерация по существующим узлам.
======CUT========
1) рекурсия
<xsl:template name="for">
<xsl
aram name="i" select="0"/>
<xsl
aram name="n"/>
<!-- Другие переменные -->
<xsl
aram name="x1"/>
<!-- ... -->
<xsl
aram name="xk"/>
<xsl:choose>
<xsl:when test="$i < $n">
<!-- Действия -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<!-- Другие переменные -->
<xsl:with-param name="x1" select="функция1($i,$n,$x1,...$xk)"/>
<!-- ... -->
<xsl:with-param name="xk" select="функцияk($i,$n,$x1,...$xk)"/>
</xsl:call-template>
</xsl:when>
<xsl
therwise>
<xsl:value-of select="результат($i,$n,$x1,...,$xk)"/>
</xsl
therwise>
</xsl:choose>
</xsl:template>
В твоем случае будет:
<xsl:template name="for">
<xsl
aram name="i" select="0"/>
<xsl
aram name="n"/>
<xsl:if test="$i < $n">
<*>
<!-- символ звездочки-
>
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Вызывать типа того:
<xsl:template match="/">
<xsl:call-template name="for">
<xsl:with-param name="n" select="101"/>
</xsl:call-template>
</xsl:template>
2) Метод Пиза для for-цикла:
Для начала выберем какое-нибудь множество узлов документа преобразования:
<xsl:variable name="set " select="document('')//node()"/>
Затем для повторения определенных действий несколько раз используем
конструкцию вида
<xsl:for-each select="$set[position() <= 101]">
<!-- Действия -->
</xsl:for-each>
Только здесь проблема что у тебя минимум сто узлов должно быть в
преобразовании твоем.
Bye.
/lexi
======CUT========