Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Петля в хслт


Автор: t77 19.9.2010, 15:12
Доброе время суток.
Вопрос собственно в том, как можно создать петлю в хслт, задав число..?
Допустим мне нужно, чтобы петля выполнялась 5 раз, не зависимо от чего либо.

Код

<xsl:variable name="numOfPages">
<xsl:text>5</xsl:text>                                            
</xsl:variable>                        
                        
<xsl:for-each select="$numOfPages">
 <div style="border:1px solid black;">
  xxx
 </div>
</xsl:for-each>                        

Данный код выдает непонятную ошибку...
Что я делаю не так?

Как это можно сделать?

Автор: diadiavova 19.9.2010, 16:28
Я уже вроде тебе объяснял, что хслт - функциональный язык и в нем нет никаких циклов(петель). Элемент for-each обрабатывает набор узлов и выполняет определенные действия для каждого элемента набора. То есть атрибуту select надо передавать объект, имеющий тип node-set, а не число, тем более почему-то заданное с помощью элемента text. smile 
Для решения твоей задачи понадобится рекурсивный шаблон, что-то типа
Код

    <xsl:template name="repeatdiv" >
        <xsl:param name="count"/>
        <div style="border:1px solid black;">
            xxx
        </div>
        <xsl:if test="$count &gt; 1">
            <xsl:call-template name="repeatdiv">
                <xsl:with-param name="count" select="$count -1"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>


Вызвать его можно так
Код

            <xsl:call-template name="repeatdiv">
                <xsl:with-param name="count" select="5"/>
            </xsl:call-template>

Автор: t77 19.9.2010, 17:01
diadiavova Спасибо. smile 

Автор: magelan 19.9.2010, 18:57
ты по что сиротинушку мучаешь?
Код

<xsl:variable name="numOfPages">
<xsl:text>5</xsl:text>                                            
</xsl:variable>  


Это наверное самый жосткий способ задать переменную. Смотри какие еще есть варианты:

- обычный
Код

<xsl:variable name="numOfPages" select="5" />

- блондинка прошла мимо, думал о другом
Код

<xsl:variable name="numOfPages" select="number('5')" />

- думать не хотел
Код

<xsl:variable name="numOfPages">5</xsl:variable>  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)