Итоговая сумма

Alexandre

PHPПенсионер
Итоговая сумма

есть путь по дереву узлов:
/root/project/task/work/hours
надо для каждой задачи путь /root/project/task
посчитать сумму времени выполненных по ней работ
work/hours

Делаю

PHP:
<xsl:value-of select = "/root/project/task/sum(work/hours)    " />
-
выдает ошибку "имеет недопустимый указатель "

что я не так сделал?
 

Orlis

Guest
<xsl:for-each select="/root/project/task">
<xsl:value-of select = "sum(work/hours)"/>
</xsl:for-each>
 

Alexandre

PHPПенсионер
Orlis
не получается так,
<xsl:for-each select="/root/project/task">
<xsl:value-of select = "sum(work/hours)"/>
</xsl:for-each>


почему-то получилось так
<xsl:value-of select = "sum(//hours)"/>
 

chameleon

Новичок
контекстный узел какой?
я так понимаю все это вычисляется в <xsl:template match="task"/>?
 

chameleon

Новичок
странно...если я все правильно понял:
<?xml version="1.0"?>
PHP:
<root>
        <project>
                <task>
                        <work>
                                <hours>10</hours>
                                <hours>5</hours>
                        </work>
                        <work>
                                <hours>20</hours>
                                <hours>1</hours>
                        </work>
                </task>
                <task>
                        <work>
                                <hours>11</hours>
                                <hours>3</hours>
                        </work>
                        <work>
                                <hours>23</hours>
                                <hours>2</hours>
                        </work>
                </task>
        </project>
</root>
у меня отрабатывает такой шаблон:
<?xml version="1.0" ?>
PHP:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl: output method="xml" encoding="Windows-1251" indent="yes"/>
<xsl:template match="/">
<ul>
        <xsl:call-template name="summ"/>
</ul>
</xsl:template>
<xsl:template name="summ">
        <xsl:for-each select="/root/project/task">
        <li>
                <xsl:value-of select = "sum(work/hours)"/>
        </li>
        </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
а как у тебя?
 

Alexandre

PHPПенсионер
В этом случае вот что получается:
PHP:
 "Наименование Проект  Задача  Врем"  
  Новая работа1  Новый проект_1  задача_many_worksddd  3 
 Итого:  3  
  Новая работа  Новый проект_1  Новая задача44  8 
 Итого:  8
а надо
PHP:
 "Наименование Проект  Задача  Время"  
  Новая работа1  Новый проект_1  задача_many_worksddd  3 
  Новая работа  Новый проект_1  Новая задача44  8 
 Итого:  11
благодаря твоей полсказки подошел вариант
PHP:
<xsl:template name="summ"> 
        <xsl:for-each select="/root"> 
        <li> 
                <xsl:value-of select = "sum(project/task/work/hours)"/> 
        </li> 
        </xsl:for-each> 
</xsl:template>
но так как один элемент root. то я сделал <xsl:value-of select = "sum(//hours)"/> - так короче
 

chameleon

Новичок
<xsl:value-of select = "sum(//hours)"/>
это не короче, рекомендовал бы вообще избегать подобных запросов без необходимости. Такое применяется, если у тебя нужные узлы находятся на разных уровнях иерархии документа. Вслучае если структура более четкая (у тебя такая и есть), отсекай, ради бога, по-нормальному.

из первого поста:
надо для каждой задачи путь /root/project/task
посчитать сумму времени выполненных по ней работ
а последнем примере считаешь сумму по всем задачам проекта...это не одно и то же. Что в вначале просил то и получил :).. Если сумма по всем задачам проекта, принцип тот-же..,хотя, если честно, не понимаю, зачем здесь тебе потребовались именно именованные шаблоны?
 

Alexandre

PHPПенсионер
считаешь сумму по всем задачам проекта...это
в принципе мне это и надо, наверно я не так выразился в первом посте.
зачем здесь тебе потребовались именно именованные шаблоны
именованные шаблоны мне потребовались не здесь а в идеалогии всего проекта. это долгий и спорный вопрос, могу рассказать в привате или можно завести отдельную тему "как правильно организовать проект на XSLT"
 

chameleon

Новичок
c удовольствием поддержу/послушаю. Лучше новый топик наверное...
налив... начинай то есть :))..
 
Сверху