powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сумма подстрок тегов
2 сообщений из 2, страница 1 из 1
Сумма подстрок тегов
    #39450919
adar7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XSLT 1.0. есть XML.
Код: 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.
<?xml version="1.0" encoding="windows-1251"?>
<Реестр>
    <Строка>
        <C_CNT>3</C_CNT>
        <C_NAZN> SUM: 0; INS_SUM: 0; SUM_1_1: 0; SUM_2_1:
            0; SUM_3_1: 0; SUM_4_1: 0; SUM_5_1: 0; MONTH_2: АПРЕЛЬ.2017; SUM_1_2: 1; INS_SUM_1_2:
            73.87; SUM_2_2: 0; SUM_3_2: 7; SUM_4_2: 0; SUM_5_2: 0; SUM_1_3: 0; SUM_2_3: 0; SUM_3_3:
            0; SUM_4_3: 0; SUM_5_3: 0; SUM_1_4: 0; SUM_2_4: 0; SUM_3_4: 0; SUM_4_4: 0; SUM_5_4: 0;
            MONTH_5: ЯНВАРЬ.2017; SUM_1_5: 1; INS_SUM_1_5: 0.00; SUM_2_5: 0; SUM_3_5: 0; SUM_4_5: 0;
            SUM_5_5: 0; SUM_1_6: 0; SUM_2_6: 0; SUM_3_6: 0; SUM_4_6: 0; SUM_5_6: 0; CNT: 3;</C_NAZN>
    </Строка>
    <Строка>
        <C_CNT>2</C_CNT>
        <C_NAZN> SUM: 0; INS_SUM: 0; SUM_1_1: 0; SUM_2_1:
            0; SUM_3_1: 0; SUM_4_1: 0; SUM_5_1: 0; MONTH_2: АПРЕЛЬ.2017; SUM_1_2: 3; SUM_2_2: 0;
            SUM_3_2: 3; SUM_4_2: 0; SUM_5_2: 0; SUM_1_3: 0; SUM_2_3: 0; SUM_3_3: 0; SUM_4_3: 0;
            SUM_5_3: 0; SUM_1_4: 0; SUM_2_4: 0; SUM_3_4: 0; SUM_4_4: 0; SUM_5_4: 0; MONTH_5:
            ЯНВАРЬ.2017; SUM_1_5: 0; SUM_2_5: 0; SUM_3_5: 0; SUM_4_5: 0; SUM_5_5: 0; SUM_1_6: 0;
            SUM_2_6: 0; SUM_3_6: 0; SUM_4_6: 0; SUM_5_6: 0; CNT: 2;</C_NAZN>
    </Строка>
    <Строка>
        <C_CNT>1</C_CNT>
        <C_NAZN> SUM: 2; INS_SUM: 0;
            SUM_1_1: 0; SUM_2_1: 0; SUM_3_1: 0; SUM_4_1: 0; SUM_5_1: 0; SUM_1_2: 0; SUM_2_2: 0;
            SUM_3_2: 0; SUM_4_2: 0; SUM_5_2: 0; SUM_1_3: 0; SUM_2_3: 0; SUM_3_3: 0; SUM_4_3: 0;
            SUM_5_3: 0; SUM_1_4: 0; SUM_2_4: 0; SUM_3_4: 0; SUM_4_4: 0; SUM_5_4: 0; SUM_1_5: 0;
            SUM_2_5: 0; SUM_3_5: 0; SUM_4_5: 0; SUM_5_5: 0; SUM_1_6: 0; SUM_2_6: 0; SUM_3_6: 0;
            SUM_4_6: 0; SUM_5_6: 0; CNT: 1;</C_NAZN>
    </Строка>
</Реестр>




написал 2 template. template get_valid_registry_sum успешно считает сумму по всем нодам, но get_valid_registry_sum2 ругается на то,что value is not nodeset.Как посчитать сумму по элементам CNT в тегах C_NAZN?
Код: 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.
                            <xsl:call-template name="get_valid_registry_sum">
                                <xsl:with-param name="element_name" select="'C_CNT'"/>
                            </xsl:call-template>

                            <xsl:call-template name="get_valid_registry_sum2">
                                <xsl:with-param name="element_name" select="'C_NAZN'"/>
                                <xsl:with-param name="str_name" select="'CNT'"/>
                            </xsl:call-template> 


   <xsl:template name="get_valid_registry_sum">
        <xsl:param name="element_name"/>    
        <xsl:value-of select="format-number((sum(//Строка/*[name()=$element_name]) div 100) * 100, '0.00')"/>
    </xsl:template>
    
    <xsl:template name="get_valid_registry_sum2">
        <xsl:param name="element_name"/>   
        <xsl:param name="str_name"/>
        
        <xsl:value-of select="format-number(
                                            (sum(
                                                    substring-before(
                                                                        substring-after(//Строка/*[name()=$element_name]
                                                                                        ,concat($str_name,':')
                                                                                        )
                                                                        ,';'
                                                                    )
                                                 ) div 100
                                             ) * 100
                                             , '0.00'
                                           )"/>
    </xsl:template>
...
Рейтинг: 0 / 0
Сумма подстрок тегов
    #39451369
adar7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adar7,
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <root>
        <xsl:call-template name="sum-nodes" >
            <xsl:with-param name="nodes" select="//Строка/C_NAZN" />
            <xsl:with-param name="str_name" select="'CNT'"/>
        </xsl:call-template>
        
    </root>
</xsl:template>
            
    <xsl:template name="sum-nodes" >
        <xsl:param name="nodes"/>
        <xsl:param name="str_name"/>
        <xsl:param name="sum" select="0"/>
        <xsl:param name="newSum" select="$sum + number(substring-before(substring-after($nodes[1],concat($str_name,':')),';'))"/>
        <xsl:choose>
            <xsl:when test="count($nodes) > 1">
                <!-- recursive call --> 
                <xsl:call-template name="sum-nodes" >
                    <xsl:with-param name="nodes" select="$nodes[position() > 1]" />
                    <xsl:with-param name="str_name" select="$str_name" />
                    <xsl:with-param name="sum" select="$newSum" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="format-number($newSum, '0')"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

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


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