Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сумма из отсортированного диапазона значений / 4 сообщений из 4, страница 1 из 1
05.09.2007, 11:59
    #34776979
elf-nn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма из отсортированного диапазона значений
Привет!
Есть документ - пользователи и траффик
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" ?>
<document date="Декабрь 2006">
<record><user> 10 . 38 . 1 . 1 </user><size> 11222562200 </size></record>
<record><user> 10 . 38 . 1 . 2 </user><size> 11148860007 </size></record>
<record><user> 10 . 38 . 1 . 3 </user><size> 11333754420 </size></record>
<record><user> 10 . 55 . 6 . 4 </user><size> 15243754420 </size></record>
<record><user> 10 . 55 . 6 . 5 </user><size> 12843758787 </size></record>
<record><user> 10 . 55 . 6 . 6 </user><size> 6504155355 </size></record>
</document>

Необходимо отсортировать записи по size в порядке убывания и получить сумму size всех записей начиная с четвертой из отсортированной последовательности

Делал так:
Код: plaintext
1.
2.
3.
4.
5.
<xsl:for-each select="document/record">
  <xsl:sort  order="descending" data-type="number" select="size" />
  <xsl:if test="position() >='4'">
    <xsl:variable name="summ" select="sum((//size) [position() >= 4])" />
  </xsl:if>
</xsl:for-each>

проблема в том, что sum((//size) [position() >= 4]) выбирает сумму последних четырех size в изначальном НЕОТСОРТИРОВАННОМ xml-документе

Уже сбился с ног в поиске решения. Может у кого то будут идеи как порешать. Спасибо!
...
Рейтинг: 0 / 0
05.09.2007, 17:06
    #34778637
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма из отсортированного диапазона значений
попробуй сунуть форыч в вариабл, просто выдавая список чисел, потом этот вариабл тупо распарсить и сложить.
...
Рейтинг: 0 / 0
06.09.2007, 12:10
    #34780533
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма из отсортированного диапазона значений
maXmoпопробуй сунуть форыч в вариаблуже сортированный !
maXmoпросто выдавая список чисел, потом этот вариабл тупо распарсить и сложить.лучше все-таки сформировать result tree fragment и потом уже сложить нужные значения с помощью sum:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="text" encoding="windows-1251"/>

<xsl:template match="/">

  <xsl:variable name="sortedList">
    <xsl:for-each select="document/record">
      <xsl:sort order="descending" data-type="number" select="size" />
      <xsl:if test="position() >='4'">
        <xsl:copy-of select="size"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:variable>
  <xsl:value-of select="sum(msxsl:node-set($sortedList)/size)"/>

</xsl:template>

</xsl:stylesheet>
Это пример для xslt 1.0 и для msxml-я.
В xslt 2.0 функции расширения типа msxsl:node-set для конвертации RTF в node-set уже не требуются, т.к. там RTF просто нет и xsl:variable по дефолту формирует временное дерево:
www.w3.org XSL Transformations (XSLT) Version 2.0The result tree fragment data-type is eliminated. A variable-binding element with content (and no as attribute) now constructs a temporary tree, and the value of the variable is the root node of this tree (see 9.3 Values of Variables and Parameters). With an as attribute, a variable-binding element may be used to construct an arbitrary sequence. These features eliminate the need for the xx:node-set extension function provided by many XSLT 1.0 implementations.
...
Рейтинг: 0 / 0
11.09.2007, 11:51
    #34790630
elf-nn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма из отсортированного диапазона значений
Сделал все через RTF и XSLT 2.0 без MSXML. Вроде показывает то что надо <xsl:value-of select="sum($sortedList/size)" />

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


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