Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Группировка? / 15 сообщений из 15, страница 1 из 1
07.09.2007, 12:44
    #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
07.09.2007, 15:48
    #34784893
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
обсуждалось, искать лень, повторять лень. В общем, бери первые элементы с соотв. значениями, а дальше понятно.
...
Рейтинг: 0 / 0
07.09.2007, 15:49
    #34784895
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
первый элемент – это когда по оси preceding-sibling нет элементов с таким же значением
...
Рейтинг: 0 / 0
07.09.2007, 15:52
    #34784905
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
пинай SuSu, я ему объяснял, когда он дубликаты языков искал
...
Рейтинг: 0 / 0
07.09.2007, 15:54
    #34784910
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
maXmoпервый элемент – это когда по оси preceding-sibling нет элементов с таким же значением

маХмо, спасибо, просто спасаете :) я просто еще не освоился с xsl, до осей этих толком не дошел, теперь хоть знаю куда копать :))
...
Рейтинг: 0 / 0
07.09.2007, 16:51
    #34785154
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
>>пинай SuSu,
maXmo !!! :kwasny: , закапать тебя мало.
ZanZibArgh - поищи на форуме , действительно тема была.
Под рукой парсеров нет, пропарсить нечем.
В выходные меня у компа не будет , так что если отпишу то не раньше воскресенья ближе к полуночи.
либо ищи, либо жди (лучше первое)
...
Рейтинг: 0 / 0
09.09.2007, 23:10
    #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
10.09.2007, 08:37
    #34787107
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
спасибо
...
Рейтинг: 0 / 0
10.09.2007, 08:39
    #34787109
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
тьфу ты блин )) то я и сам уже сделал - это в моем топике и было, а тут вопрос в другом - вопрос группировки..
ну не важно, буду мучать оси.
...
Рейтинг: 0 / 0
10.09.2007, 11:00
    #34787471
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
SuSaтам малость совсем другое былообщая черта – поиск уникальных/повторяющихся значений, а уж группировка – дело техники.
...
Рейтинг: 0 / 0
10.09.2007, 11:54
    #34787730
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
2 Махмо
ткните мордой пожалуйста, мне сейчас для этого оси читать или ключи?(

и вопрос по ключам - можно ли по содержимому элемента ключ делать, а не только по аттрибутам?
...
Рейтинг: 0 / 0
10.09.2007, 12:30
    #34787895
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
оси читай, ключи успеются
...
Рейтинг: 0 / 0
10.09.2007, 12:35
    #34787916
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
пасип
...
Рейтинг: 0 / 0
11.09.2007, 10:05
    #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
11.09.2007, 10:11
    #34790130
ZanZibArgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Группировка?
2SuSu,
сорри, проглядел половину твоего коммента. ss: это ns мс-офисовский, точнее ехелевский.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Группировка? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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