Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сумма подстрок тегов / 2 сообщений из 2, страница 1 из 1
10.05.2017, 17:30
    #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
11.05.2017, 14:09
    #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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сумма подстрок тегов / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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