powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / преобразование XML с помощью XSL
5 сообщений из 5, страница 1 из 1
преобразование XML с помощью XSL
    #34272072
blunt BOO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Нужно сделать преобразование XML файла(сделать нечто вроде группировки). Всю голову сломал, низнаю с какой стороны подойти.

Исходный фрагмент

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<service name="service1">
      <year name="2006" count="3"/>
      <year name="2007" count="2"/>
</service>

<service name="service2">
      <year name="2007" count="4"/>
</service>

Результирующий фрагмент
Код: plaintext
1.
2.
3.
4.
<service name="all">
      <year name="2006" count="3"/>
      <year name="2007" count="6"/>
</service>

Спасибо
...
Рейтинг: 0 / 0
преобразование XML с помощью XSL
    #34272207
andrei77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет
это вот группировка, а как "сложить" элементы я не знаю:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="node( )|@*">
<xsl:copy>
<xsl:apply-templates select="@*| node( )" />
</xsl:copy>
</xsl:template>

<xsl:output method="xml" version="1.0" encoding="UTF-8"
omit-xml-declaration="yes"/>

<xsl:template match="rootELEMENT">
<xsl:copy>
<xsl:apply-templates select="*/year" />
</xsl:copy>
</xsl:template>


</xsl:stylesheet>


у меня вот проблема в другом как из того результата сделать входные данные
...
Рейтинг: 0 / 0
преобразование XML с помощью XSL
    #34272327
blunt BOO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, я думаю, что этот код даст следующий результат

Код: plaintext
1.
2.
3.
<year name="2006" count="3"/>
<year name="2007" count="2"/>
<year name="2007" count="4"/>
...
Рейтинг: 0 / 0
преобразование XML с помощью XSL
    #34272871
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
<service name="all">
      <year name="2006" count="{sum(*/year[@name='2006']/@count)}"/>
      <year name="2007" count="{sum(*/year[@name='2007']/@count)}"/>
</service>
...
Рейтинг: 0 / 0
преобразование XML с помощью XSL
    #34278223
blunt BOO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, решение вот такое :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
   <xsl:key name="year" match="year" use="@name" /> 

  <xsl:template match="/">
        <xsl:copy>
            <services name="all">
             <xsl:apply-templates select="(*/year[generate-id(.)=generate-id(key('year',@name))])" />
        </services>
        </xsl:copy>
  </xsl:template> 

  <xsl:template match ="year">
    <xsl:variable name="tmp" select="@name"/>
    <xsl:variable name="searchcountperyear">
      <xsl:value-of select="sum(//year[@name=$tmp]/@count)"/>
    </xsl:variable>
   <year name="{@name}"  count="{$searchcountperyear}">          
   </year>   
  </xsl:template>

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


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