powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
7 сообщений из 7, страница 1 из 1
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36778634
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается выполнить группировку...
В чем может быть проблема?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="text"/>

  <xsl:template match="Документы">

    <xsl:for-each-group select="НаправлениеДокумента/Входящие/Документ" group-by="ТипДокумента">
      <xsl:value-of select="current-grouping-key()"/>
      <xsl:text>
</xsl:text>
    </xsl:for-each-group>
   </xsl:template>

</xsl:stylesheet>


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="stat.xslt"?>
<Документы> 
     <НаправлениеДокумента>
          <Входящие>
               <Документ>
                    <ТипДокумента>Ведомость</ТипДокумента>
                    <НазваниеДокумента> 1 .XML</НазваниеДокумента>
                    <КоличествоСтраниц> 1 </КоличествоСтраниц>
               </Документ>
               <Документ>
                    <ТипДокумента>Ведомость</ТипДокумента>
                    <НазваниеДокумента> 2 .XML</НазваниеДокумента>
                     <КоличествоСтраниц> 1 </КоличествоСтраниц>
               </Документ>
          </Входящие>
     </НаправлениеДокумента>
</Документы>
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36778952
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтаир,

<?xml version=" 1.0 " ...
<xsl:for-each -group

Как бы и не должно работать ;-)

Я кстати даже не выяснял, кто из трансформеров может поддерживать 2ю версию, хлопотно очень и тормозно.
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36779051
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и что делать?
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36779732
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтаир,

как-то так, если я правильно понял, что вы хотите:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" />

    <xsl:key name="type" match="/Документы/НаправлениеДокумента/Входящие/Документ" use="ТипДокумента/text()" />

    <xsl:template match="/">
        <xsl:for-each select="/Документы/НаправлениеДокумента/Входящие/Документ[generate-id()=generate-id(key('type',ТипДокумента/text()))]">
            <H1><xsl:value-of select="ТипДокумента" /></H1>
            <xsl:for-each select="/Документы/НаправлениеДокумента/Входящие/Документ[ТипДокумента/text()=current()/ТипДокумента/text()]">
                <xsl:value-of select="НазваниеДокумента" /><BR/>
            </xsl:for-each>
            <BR/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36780214
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Теперь пытаюсь сложить Количество человек для каждого Типадокумента:
Код: plaintext
1.
2.
3.
  <xsl:for-each select="/Документы/НаправлениеДокумента/Входящие/Документ[ТипДокумента/text()=current()/ТипДокумента/text()]"> 
<xsl:value-of select="sum(КоличествоЧеловек)" />
<BR/>
            </xsl:for-each>
И посчитать количество таких нодов:

Код: plaintext
<xsl:value-of select="count(КоличествоЧеловек)" />
Но ничего не выходит.
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36780330
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АльтаирНо ничего не выходит.
Функции sum() нет в XSL. Нужно делать примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<xsl:variable name="nodes" select="/Документы/НаправлениеДокумента/Входящие/Документ[ТипДокумента=current()/ТипДокумента]"/>
<xsl:value-of select="count($nodes)" />
<xsl:call-template name="sum">
  <xsl:with-param name="pos" select="count($nodes)"/>
  <xsl:with-param name="nodes" select="$nodes"/>
</xsl:call-template>

<xsl:template name="sum">
  <xsl:param name="pos"/>
  <xsl:param name="nodes"/>
  <xsl:choose>
    <xsl:when test="$pos = 0">
      <xsl:value-of select="0"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:variable name="sum">
        <xsl:call-template name="sum">
          <xsl:with-param name="pos" select="$pos - 1"/>
          <xsl:with-param name="nodes" select="$nodes"/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:value-of select="$sum + $nodes[$pos]/КоличествоЧеловек"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
...
Рейтинг: 0 / 0
Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
    #36781992
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо! Не знаю, что я на этом group зациклилась, столько времени потеряла.
Теперь всё как надо работает
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Ключевое слово "xsl:template" не может содержать "xsl:for-each-group".
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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