powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / sum в xslt
5 сообщений из 5, страница 1 из 1
sum в xslt
    #38432292
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так работает:
<xsl:for-each select="$rekv">
<xsl:value-of select='sum(@Сумма)' />
</xsl:for-each>

Но если вместо @Сумма поставить переменную, то не работает.
Как суммировать переменную в цикле?
Если вывести значение переменной <xsl:value-of select='$v1' /> , то будет: 10,20,30
а вот так <xsl:value-of select='sum($v1)' /> - пустота
...
Рейтинг: 0 / 0
sum в xslt
    #38432328
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтаира вот так <xsl:value-of select='sum($v1)' /> - пустотаВсе правильно. Если $v1 = 10, то чему должно быть равно sum(10)?

sum работает с набором узлов, а не скалярными значениями.
АльтаирКак суммировать переменную в цикле?Никак и это не нужно. Сумма значений из предыдущих узлов по отношению к контексту считается с помощью preceding-sibling.
тынц
...
Рейтинг: 0 / 0
sum в xslt
    #38432512
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, это немного не то.. Дело в том, что если бы мне просто нужно было сложить узлы, то я бы смогла их сложить и с помощью 'sum(@Сумма)'. Но числа у меня в непотребном виде, с пробелами и запятами, поэтому я их перед сложением прогоняю через функции, на выходе которых получаю переменную v1. А как дальше с переменными поступить - не знаю.
...
Рейтинг: 0 / 0
sum в xslt
    #38432654
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно из результатов перегона создать временное дерево и просуммировать его.
тынц
...
Рейтинг: 0 / 0
sum в xslt
    #38432698
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь. но в итоге сделала так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
<xsl:template name="replace1">            
       <xsl:param name="input"/>            
       <xsl:param name="from"/>            
                  

       <xsl:choose>            
           <xsl:when test="contains($input, $from)">            
               <!--   вывод подстроки предшествующей образцу  + вывод строки замены -->            
               <xsl:value-of select="substring-before($input, $from)"/><!--   вход в итерацию -->            
               <xsl:call-template name="replace">            
                   <!--  в качестве входного параметра задается подстрока после образца замены  -->            
                   <xsl:with-param name="input" select="substring-after($input, $from)"/>            
                   <xsl:with-param name="from" select="$from"/>            
                          
               </xsl:call-template>            

           </xsl:when>            
           <xsl:otherwise>            
               <xsl:value-of select="$input"/>            
           </xsl:otherwise>            
       </xsl:choose>            
   </xsl:template>    

   <xsl:template name="replace2">            
       <xsl:param name="input"/>            
       <xsl:param name="from"/>                        
       <xsl:choose>            
           <xsl:when test="contains($input, $from)">            
               <!--   вывод подстроки предшествующей образцу  + вывод строки замены -->            
               <xsl:value-of select="substring-before($input, $from)"/>,<!--   вход в итерацию -->            
               <xsl:call-template name="replace">            
                   <!--  в качестве входного параметра задается подстрока после образца замены  -->            
                   <xsl:with-param name="input" select="substring-after($input, $from)"/>            
                   <xsl:with-param name="from" select="$from"/>            
                          
               </xsl:call-template>            

           </xsl:when>            
           <xsl:otherwise>            
               <xsl:value-of select="$input"/>            
           </xsl:otherwise>            
       </xsl:choose>            
   </xsl:template>       



<xsl:template name="sum">
  <xsl:param name="pos"/>
  <xsl:param name="nodes"/>
  <xsl:choose>
    <xsl:when test="$pos = 0">
      <xsl:value-of select="0"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:variable name="sum">
        <xsl:call-template name="sum">
          <xsl:with-param name="pos" select="$pos - 1"/>
          <xsl:with-param name="nodes" select="$nodes"/>
        </xsl:call-template>
      </xsl:variable>



 <xsl:variable name="v1">   
  <xsl:value-of select="$nodes[$pos]/text()"/> 
</xsl:variable>


<xsl:variable name="v1_">    
  	  <xsl:call-template name="replace">            
           <xsl:with-param name="input" select="$v1"/>            
           <xsl:with-param name="from" select="','"/>                        
       </xsl:call-template>   
       </xsl:variable>  

 <xsl:variable name="v1_1">    
  	  <xsl:call-template name="replace1">            
           <xsl:with-param name="input" select="$v1_"/>            
           <xsl:with-param name="from" select="' '"/>                        
       </xsl:call-template>  
       </xsl:variable>

    <xsl:value-of select="format-number($sum + $v1_1, '#0.00')" />


    </xsl:otherwise>
  </xsl:choose>
</xsl:template>  
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / sum в xslt
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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