Re: Help pls !!! Надо подщитать суммы в XLM фйле ...
От: Устрица Украина  
Дата: 07.11.01 12:24
Оценка: 3 (1)
Здравствуйте .:: MF^Viper ::., Вы писали:

.M:>Имеется данный файлик ...

.M:><?xml version="1.0"?>
.M:><Works>
.M:> <Work Sides="1" Price="100" Count="4">Xerox b/w</Work>
.M:> <Work Sides="2" Price="150" Count="5">Xerox b/w</Work>
.M:> <Work Sides="1" Price="1200" Count="4">Xerox color</Work>
.M:> <Work Page="A5" Price="400" Count="10">Laminating</Work>
.M:> <Work Page="A4" Price="600" Count="1">Laminating</Work>
.M:> <Work Page="A4" Price="3500" Count="0">Foto</Work>
.M:> <Work Page="A5" Price="2000" Count="2">Foto</Work>
.M:></Works>

.M:>Нуна подсчитать общю суму дохода ...
.M:>Пока у меня получается только подсчитать суммы по каждому виду услуг ...


Увы, похоже, придётся иметь дело со скриптами. Можно или использовать <msxsl:script> — расширение XSLT от Microsoft для написания скриптов в XSL, или генерировать HTML с маленькой функцией, которая выводит в тело сумму (ну а при генерации вы просто все суммируемые параметры туда вошъёте).

Пример — скрипт в теле XSL-файла:

1. Заменяете открывающий <xsl:stylesheet> на такой:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" — для поддержки скриптов
xmlns:my="http://mysite/nsmy" — пространство имён, в котором вы разместите свою
функцию
>

2. Пишете в <xsl:stylesheet> собственно функцию, которая и считает Итого:
<msxsl:script language="JScript" implements-prefix="my">
function getTotal(nodes)
{
var sum = 0;
var enu = new Enumerator(nodes);
for (; !enu.atEnd(); enu.moveNext()) {
var attrs = enu.item().attributes;
sum += attrs.getNamedItem("Price").nodeValue *
attrs.getNamedItem("Count").nodeValue;
}

return sum;
}
</msxsl:script>

3. Вызываете функцию там, где надо написать сумму:
<xsl:value-of select="my:getTotal(/Works/Work)" />


К сожалению, подобное решение будет работать только в том случае, если вы используете MSXMLParser (от Microsoft).


Реализовать скрипт в HTML ещё проще:

document.write(
<xsl:for-each select="/Works/Work">
<xsl:value-of select="@Price*@Count"/> +
</xsl:for-each>
0);
Тхе Енд
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.