powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как выполнить выражение в цикле XSLT?
5 сообщений из 5, страница 1 из 1
Как выполнить выражение в цикле XSLT?
    #38959994
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Что-то затруднился. Есть выражение которое в цикле нужно присвоить атрибуту "value" нового элемента "newElement" (проход по существующим элементам):

for each elements/element[(BAL > 0)]
do
count= count+ len(element)
end


Код: xml
1.
2.
3.
4.
5.
6.
7.
                                        <xsl:element name="newElement">
                                            <xsl:attribute name="value">
                                                <xsl:for-each select="elements/element[(BAL >  0)]">
                                                  <xsl:value-of select="..." />												    										        
                                                </xsl:for-each>
                                            </xsl:attribute>
                                        </xsl:element>



Затрудняюсь рализовать count=count+len(element). Что писать в <xsl:value-of select="..." /> ?
...
Рейтинг: 0 / 0
Как выполнить выражение в цикле XSLT?
    #38960220
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
<xsl:element name="newElement">
  <xsl:attribute name="value">
    <xsl:value-of select="sum(elements/element[BAL > 0])" />
  </xsl:attribute>
</xsl:element>
...
Рейтинг: 0 / 0
Как выполнить выражение в цикле XSLT?
    #38968014
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если мне нужно подсчитать в рекурсии количество вхождений? То есть понятно что можно использовать count(), но у меня в задаче сложнее условия, так что нужно делать в рекурсии (здесь для простоты просто количество). Сделал так, но что-то шаблон возвращает "", то есть пустое значение, даже не 0".

Шаблон:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    <xsl:template name="Calculate">
        <xsl:param name="path" />
        <xsl:param name="result_temp" />
        <xsl:param name="count_max" />
        <xsl:param name="current_count" />
        <xsl:for-each select="$path">
            <xsl:choose>
                <xsl:when test="$current_count < $count_max">
                    <xsl:call-template name="Calculate">
                        <xsl:with-param name="result_temp" select="number($result_temp)+1" />
                        <xsl:with-param name="path" select="elements/element[position()=$current_count+1]" />
                        <xsl:with-param name="count_max" select="$count_max" />
                        <xsl:with-param name="current_count" select="$current_count+1" />
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="number($result_temp)+1" />
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>




Первый вызов:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:element name="NewElement">
	<xsl:attribute name="v">
		<xsl:call-template name="Calculate">
			<xsl:with-param name="path" select="elements/element[position()=1]" />
			<xsl:with-param name="count_max" select="count(elements/element)" />
			<xsl:with-param name="result_temp" select="0" />
			<xsl:with-param name="current_count" select="1" />
		</xsl:call-template>
	</xsl:attribute>
</xsl:element>



В <xsl:value-of select="0" /> в цикле возвращает "" остальные строки убрать, а если поместить вне цикла, то возвращает 0. Как правильно сделать?
...
Рейтинг: 0 / 0
Как выполнить выражение в цикле XSLT?
    #38968044
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, цикла не должно быть что ли?
...
Рейтинг: 0 / 0
Как выполнить выражение в цикле XSLT?
    #38968099
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortisШаблон:Какой-то сюр.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template match="*" mode="Calculate">
  <xsl:variable name="res">
    <xsl:apply-templates select="following-sibling::*[1]" mode="Calculate" />
  </xsl:variable>
  <xsl:value-of select="number($res) + 1" />
</xsl:template>

<xsl:element name="NewElement">
  <xsl:attribute name="v">
    <xsl:apply-templates select="elements/element[1]" mode="Calculate"/>
  </xsl:attribute>
</xsl:element>
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как выполнить выражение в цикле XSLT?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]