powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Группировка?
15 сообщений из 15, страница 1 из 1
Группировка?
    #34784037
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
продолжение этой темы
Код: 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.
25.
26.
27.
28.
29.
30.
31.
<table>
 <row>
  <cell>name</cell>
  <cell>date</cell>
  <cell>num</cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 2 </cell>
  <cell> 3 </cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 2 </cell>
  <cell> 4 </cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 3 </cell>
  <cell> 1 </cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 3 </cell>
  <cell> 3 </cell>
 </row>
 <row>
  <cell> 4 </cell>
  <cell> 5 </cell>
  <cell> 6 </cell>
 </row>
<table>


как это сгруппировать?((

пока добрался только до:

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
  <xsl:template match="/">
   <rpt>
    <xsl:element name="body">
      <xsl:apply-templates select="//ss:Row"/>
    </xsl:element>
   </rpt>
  </xsl:template>

  <xsl:template match="ss:Row">
    <xsl:if test="position()!=1">
      <xsl:element name="data">
      <xsl:attribute name="id"><xsl:value-of select="position()-1"/></xsl:attribute>
        <xsl:for-each select="ss:Cell">
        <xsl:choose>
         <xsl:when test="position()=1">
          <xsl:if test="position()=1">
            <name>
              <xsl:value-of select="current."/>
            </name>
          </xsl:if>
          </xsl:when>
          <xsl:otherwise>
            <info>
              <xsl:if test="position()=2">
                <date>
                  <xsl:value-of select="."/>
                </date>
              </xsl:if>
              <xsl:if test="position()=3">
                <num>
                  <xsl:value-of select="."/>
                </num>
              </xsl:if>
             </info>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>
      </xsl:element>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

в результате:
[SRC
- <data id="1">
<name>1</name>
- <info>
<date>2</date>
</info>
- <info>
<num>3</num>
</info>
</data>
- <data id="2">
<name>1</name>
- <info>
<date>2</date>
</info>
- <info>
<num>4</num>
</info>
</data>
- <data id="3">
<name>1</name>
- <info>
<date>3</date>
</info>
- <info>
<num>1</num>
</info>
</data>
- <data id="4">
<name>1</name>
- <info>
<date>3</date>
</info>
- <info>
<num>3</num>
</info>
</data>
- <data id="5">
<name>4</name>
- <info>
<date>5</date>
</info>
- <info>
<num>6</num>
</info>
</data>
[/src]
извините за этот ужос.. но по другому не могу объяснить..

как мне все это представить в виде
Код: plaintext
1.
2.
3.
4.
<data>
 <name> 1 </name>
 <info><date> 2 </date><num> 3 </num></info>
 <info><date> 2 </date><num> 4 </num></info>
</data>

ну в общем группировку по определенному полю\полям ((
...
Рейтинг: 0 / 0
Группировка?
    #34784893
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обсуждалось, искать лень, повторять лень. В общем, бери первые элементы с соотв. значениями, а дальше понятно.
...
Рейтинг: 0 / 0
Группировка?
    #34784895
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первый элемент – это когда по оси preceding-sibling нет элементов с таким же значением
...
Рейтинг: 0 / 0
Группировка?
    #34784905
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пинай SuSu, я ему объяснял, когда он дубликаты языков искал
...
Рейтинг: 0 / 0
Группировка?
    #34784910
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoпервый элемент – это когда по оси preceding-sibling нет элементов с таким же значением

маХмо, спасибо, просто спасаете :) я просто еще не освоился с xsl, до осей этих толком не дошел, теперь хоть знаю куда копать :))
...
Рейтинг: 0 / 0
Группировка?
    #34785154
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>пинай SuSu,
maXmo !!! :kwasny: , закапать тебя мало.
ZanZibArgh - поищи на форуме , действительно тема была.
Под рукой парсеров нет, пропарсить нечем.
В выходные меня у компа не будет , так что если отпишу то не раньше воскресенья ближе к полуночи.
либо ищи, либо жди (лучше первое)
...
Рейтинг: 0 / 0
Группировка?
    #34786952
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу того с чего все начилось:
авторподскажите пожалуйста,
вот есть у меня структура (дитя excel'a)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<table>
 <row>
  <cell>a</cell>
  <cell>b</cell>
  <cell>v</cell>
 </row>
 <row>
  <cell> 1 </cell>
  <cell> 2 </cell>
  <cell> 3 </cell>
 </row>
 <row>
  <cell> 4 </cell>
  <cell> 5 </cell>
  <cell> 6 </cell>
 </row>
<table>
cellы без атрибутов, row тоже
с помощью какого xsl преобразования все это превратить в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<data>
<a> 1 </a>
<b> 2 </b>
<c> 3 </c>
</data>
<data>
<a> 4 </a>
<b> 5 </b>
<c> 6 </c>
</data>

был вот такой ответ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        <xsl:template match="table">
                <table>
                        <xsl:apply-templates/>
                </table>
        </xsl:template>
        <xsl:template match="row[1]"/>
        <xsl:template match="row">
                <data>
                        <xsl:apply-templates/>
                </data>
        </xsl:template>
        <xsl:template match="cell">
                <xsl:variable name="col-num" select="count(preceding-sibling::cell) + 1"/>
                <xsl:element name="{/table/row[1]/cell[$col-num]}">
                        <xsl:apply-templates/>
                </xsl:element>
        </xsl:template>
он 100% верен. если применять к исходным данным и ждать того результата, что написано. конечно можно и красивее, но это уже лирика.
По поводу уже этой темы, нифига не понял чего хотел.. куча кода без описания чего надо. в желаемом результате вижу участие 3- х блоков из 6 исходных. xsl шный код как и сам xml вообще невалидны.. что за ss: ? , где его ns ? Даже при валидности кода, резульата вообще не увидел. 3 пустых тега, а не то что приведено. В общем сформулируй словами чего хочешь тогда поможем.
>>пинай SuSu, я ему объяснял, когда он дубликаты языков искал
там малость совсем другое было, мне надо было при совпадении атрибута в 2 братьях выдать отностиельно второго сообщение об ошибке и записалось там вса одним xpaths выражением.
...
Рейтинг: 0 / 0
Группировка?
    #34787107
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
Группировка?
    #34787109
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тьфу ты блин )) то я и сам уже сделал - это в моем топике и было, а тут вопрос в другом - вопрос группировки..
ну не важно, буду мучать оси.
...
Рейтинг: 0 / 0
Группировка?
    #34787471
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaтам малость совсем другое былообщая черта – поиск уникальных/повторяющихся значений, а уж группировка – дело техники.
...
Рейтинг: 0 / 0
Группировка?
    #34787730
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Махмо
ткните мордой пожалуйста, мне сейчас для этого оси читать или ключи?(

и вопрос по ключам - можно ли по содержимому элемента ключ делать, а не только по аттрибутам?
...
Рейтинг: 0 / 0
Группировка?
    #34787895
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оси читай, ключи успеются
...
Рейтинг: 0 / 0
Группировка?
    #34787916
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пасип
...
Рейтинг: 0 / 0
Группировка?
    #34790107
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решение.
Код: 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.
<?xml version = "1.0" encoding = "utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="windows-1251" method="xml"/>

<xsl:key name="CK" match="Row" use="Cell[1]/Data"/>

<xsl:template match="/">
  <ROW>
   <xsl:for-each select="//Row[generate-id()=generate-id(key('CK', Cell[1]))]">
  <CELL>
    <NAME>
    <xsl:value-of select="Cell[1]"/>
    </NAME>
    <DATA>
    <xsl:for-each select="key('CK',Cell[1])">
      <A><xsl:value-of select="substring(Cell[2],1,10)"/></A>
      <B><xsl:value-of select="Cell[3]"/></B>
    </xsl:for-each>
    </DATA>
   </CELL>
   </xsl:for-each>
  </ROW>
</xsl:template>

</xsl:stylesheet>

сейчас еще попробую через дистинкт по этой статье , тока хз, подхватит ли этот exsl msxsl.exe)
...
Рейтинг: 0 / 0
Группировка?
    #34790130
ZanZibArgh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SuSu,
сорри, проглядел половину твоего коммента. ss: это ns мс-офисовский, точнее ехелевский.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Группировка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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