Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > xsl:for-each и обновлние переменной


Автор: tester007 16.9.2011, 17:28
В общем я хочу сделать такую проверку, если этот цикл прокручивается первый раз, то делай то-то.
position() не пойдёт, т.к. некоторые элементы пропускаются и мне не нужны.
Код

<xsl:variable name="isss" select="5" />
<xsl:for-each>
<xsl:if test="not($isss='10')">
        <xsl:variable name="isss" select="10" />
        Тест
        <xsl:value-of select="$isss" />
        </xsl:if >
</xsl:for-each>

Выводит мне "Тест 10" 3 раза, а должен 1 раз. 

З.ы, Зачем придумали этот язык, если возможностей много не доработанно? И почему его некоторые используют? Намного проще без него, а главное быстрее.

Автор: diadiavova 16.9.2011, 19:29
tester007, увы, но тебе придется более глубоко продумать формулировки того, что и когда делать. То чего ты хочешь не возможно в принципе, поскольку фор-ич - это вообще не цикл. XSLT - функциональный язык и тут циклов в принципе нет, форич указывает на то, что над всеми узлами набора надо выполнить определенную операцию, но даже порядок выполнения указать нельзя.
Цитата(tester007 @  16.9.2011,  18:28 Найти цитируемый пост)
З.ы, Зачем придумали этот язык, если возможностей много не доработанно? И почему его некоторые используют? Намного проще без него, а главное быстрее. 

Это удел всех DSL-ов, он может быть очень удобным для решения некоторого круга задач, но как только задача оказывается либо нетривиальной, либо просто такой подход не предусмотрен - приходится извращаться. Есть множество задач, для решения которых он очень удобен и в первую очередь декларативностью, то есть большие куски выходного документа легко могут быть просто вставлены в преобразование, а то, что должно быть сгенерировано - генерируется. Кроме того, язык расширяемый и, в зависимости от того, какой процессор используется, его можно расширить любыми функциями написанными на других языках. Да и не только в этом дело, зачастую часть логики приложения можно вынести за пределы компилируемого кода, что придает программе бОльшую гибкость и т.д. Но когда начинаешь с ним работать многое удивляет именно из-за того, что это функциональный язык.

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