Help pls !!! Надо подщитать суммы в XLM фйле ...
От: .:: MF^Viper ::.  
Дата: 04.11.01 15:47
Оценка:
Имеется данный файлик ...

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

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

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN" />
<xsl:template match="/">
<html>
<head>
<style type="text/css">
BODY {
SCROLLBAR-FACE-COLOR: #6a84ae; SCROLLBAR-HIGHLIGHT-COLOR: #aaaaff; SCROLLBAR-SHADOW-COLOR: #335997; SCROLLBAR-3DLIGHT-COLOR: #335997; SCROLLBAR-ARROW-COLOR: #ffffce; SCROLLBAR-TRACK-COLOR: #335997; SCROLLBAR-DARKSHADOW-COLOR: black;
FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
TD {
FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
A:link {
FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #214a79; TEXT-DECORATION: none
}
A:visited {
FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #214a79; TEXT-DECORATION: none
}
A:active {
FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #214a79; TEXT-DECORATION: none
}
A:hover {
FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #5555ff; TEXT-DECORATION: underline
}
A:hover {
FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #5555ff; TEXT-DECORATION: underline
}
.mainheader {
FONT-WEIGHT: bold; FONT-SIZE: 18px
}
.subheader {
FONT-WEIGHT: bold
}
.info {
FONT-WEIGHT: bold; FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #214a79; TEXT-DECORATION: none
}
.summ {
FONT-WEIGHT: bold; FONT-FAMILY: Verdana, Sans-Serif; FONT-SIZE: 8pt; COLOR: #aa1a79; TEXT-DECORATION: none
}
</style>
</head>

<body bgcolor="#eeeeee">
<table width="100%">
<tbody>
<tr>
<xsl:for-each select="/Works/Work">
<xsl:value-of select="@Price*@Count"/>
</xsl:for-each>
<xsl:apply-templates select="/Works/Work">
<xsl:sort select="number(Work)" order="descending"/>
<xsl:sort select="number(/Work/@Price)" order="descending"/>
</xsl:apply-templates>
</tr>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="Work">
<br/><br/>
<span class="subheader"><xsl:value-of select="."/></span><br/>
<xsl:if test="@Sides">
::: Sides: <span class="info"><xsl:value-of select="@Sides"/></span><br/>
</xsl:if>
::: Price: <span class="info"><xsl:value-of select="@Price"/></span><br/>
<xsl:if test="@Page">
::: Page Format: <span class="info"><xsl:value-of select="@Page"/></span><br/>
</xsl:if><br/>
::: Pages: <span class="info"><xsl:value-of select="@Count"/></span><br/>
<xsl:variable name="Summ" select="format-number(@Count*@Price,'###,###')"/>
::: Summ: <span class="summ"><xsl:value-of select="$Summ"/></span>
</xsl:template>
</xsl:stylesheet>

Зранее пасиба !!!
.:: MF^Viper ::.
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...
Пока на собственное сообщение не было ответов, его можно удалить.