Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Интересное преобразование XSLT / 25 сообщений из 31, страница 1 из 2
02.08.2016, 18:42
    #39284839
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Сначала задача мне показалась довольно простой, но потом я решил обратиться к профессионалам.

Исходный XML:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<main>
 <group name="xxx">
  <subgroup>value1</subgroup>
  <subgroup>value1</subgroup>
  <subgroup>value2</subgroup>
  <group name="yyy">
   <subgroup>value2</subgroup>
   <subgroup>value1</subgroup>
   <subgroup>value1</subgroup>
   <subgroup>value3</subgroup>
   <group name="xxx">
    <subgroup>value1</subgroup>
    <subgroup>value2</subgroup>
   </group>
  </group>
 </group>
</main>


Результат должен быть:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<main>
  <subgroup group="xxx" double = "5">value1</subgroup>
  <subgroup group="xxx" double = "5">value1</subgroup>
  <subgroup group="xxx" double = "3">value2</subgroup>
  <subgroup group="xxx/yyy" double = "3">value2</subgroup>
  <subgroup group="xxx/yyy" double = "5">value1</subgroup>
  <subgroup group="xxx/yyy" double = "5">value1</subgroup>
  <subgroup group="xxx/yyy/xxx" double = "5">value1</subgroup>
  <subgroup group="xxx/yyy/xxx" double = "3">value2</subgroup>
</main>



Прошу обратить внимание на value3, оно в единичном виде, значит в конечном XML должно отсутствовать.

Моя искренняя благодарность тому, кто сможет задачу решить одним XSLT-преобразованием. Если решение будет двумя преобразованиями, то с хорошей оптимизацией по скорости, при больших объемах данных.

Я очень уважаю этот форум, поэтому просьба - не писать глупости!
...
Рейтинг: 0 / 0
02.08.2016, 19:09
    #39284864
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Хочу добавить три очевидных условия

1) узел group имеет бесконечную вложенность.
2) узел subgroup только может быть только подгруппой group, но также бесконечное количество раз.
3) количество повторений всех group не ограничено.
...
Рейтинг: 0 / 0
02.08.2016, 20:32
    #39284902
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
а double по какому принципу проставляется?
...
Рейтинг: 0 / 0
02.08.2016, 20:42
    #39284906
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
@bc,

маловато конкретики
1, value3 в единичном виде - это на весь документ или только на тот узел в котом оно присутствует????
а если не в единичном виде - то что тогда? value2 и value1 тоже в единичном виде, почему они должны быть в новом документе?
2, на каких условиях определяются значения атрибута double ????
...
Рейтинг: 0 / 0
02.08.2016, 20:44
    #39284907
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
какая версия xslt используется?
...
Рейтинг: 0 / 0
02.08.2016, 20:47
    #39284909
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariy,

Хороший вопрос , но все же ответ на него есть в задаче.
double - повторение по всему файлу, значения [value...] .
Я упомянул в задаче о value3 не случайно.
...
Рейтинг: 0 / 0
02.08.2016, 20:49
    #39284912
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Фридрих,

Мне бы хотелось увидеть решение на версии 1.0.
...
Рейтинг: 0 / 0
02.08.2016, 21:01
    #39284916
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Фридрих,

1) XSLT 2.0 - не грех, но менее интересно будет.
2) Подчеркну еще раз, главное производительность .
3) Поблажка - можно применять бесконечное количество преобразований.
...
Рейтинг: 0 / 0
02.08.2016, 21:15
    #39284920
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
@bc Antonariy,

Хороший вопрос , но все же ответ на него есть в задаче.
double - повторение по всему файлу, значения [value...] .
Я упомянул в задаче о value3 не случайно.слава б-гу других зашифрованных ребусов не видно
...
Рейтинг: 0 / 0
02.08.2016, 21:19
    #39284924
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Фридрих,

Я очень рад, что заинтересовал задачкой, прошу больше комментариев, вопросов. Не стесняйтесь.
Главное, чтобы комментарии и вопросы были стоящими. Будьте внимательны.
...
Рейтинг: 0 / 0
02.08.2016, 21:24
    #39284925
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariy@bc Antonariy,

Хороший вопрос , но все же ответ на него есть в задаче.
double - повторение по всему файлу, значения [value...] .
Я упомянул в задаче о value3 не случайно.слава б-гу других зашифрованных ребусов не видно

Шифровать не стремился. Когда продумывал формулировку, убрал избыточность описания. Случайно получился ребус.
Прошу прощения.
Не хотел показаться заумным.
...
Рейтинг: 0 / 0
02.08.2016, 23:09
    #39284973
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:apply-templates select="/main//subgroup"/>

<xsl:template match="subgroup">
    <subgroup>
        <xsl:attribute name ="group"><xsl:apply-templates select=".." mode="path"/></xsl:attribute>
        <xsl:value-of select="text()"/>
    <subgroup>
</xsl:template>

<xsl:template match="group" mode="path">
    <xsl:apply-templates select=".." mode="path"/>/<xsl:value-of select="@name"/>
</xsl:template>

это первый шаг. в результате получится список из subgroup. его нужно загнать в переменную.
вторым шагом делается копия этой переменной с подсчетом количества значений и проставлением в double/
третьим шагом делается копия с исключением double=1.
...
Рейтинг: 0 / 0
02.08.2016, 23:19
    #39284974
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Если Вас интересует производительность, то на любом ЯП напишите две функции по работе с ассоциативным массивом. Далее одним проходом подсчитайте количество всех value, а вторым - выведите резуьтат
...
Рейтинг: 0 / 0
03.08.2016, 00:40
    #39285002
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
_Vasilisk_,

Меня не интересует как определить производительность, потому что массив данных настолько огромный, что сразу видно действие. Но за участие спасибо, ваш запрос XSLT тоже бы хотелось видеть.
...
Рейтинг: 0 / 0
03.08.2016, 00:53
    #39285004
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariy,

Хотелось бы твердых законченных решений, без советов, но с комментариями. То есть, абсолютно твердо работающее решение проблемы, от начала и до конца. Я это указывал в теме. У меня есть три решения и все они работают медленно, даже на серьезных серверах. Подчеркну, данных должно обрабатываться катастрофически много. Поэтому задача на любителя красивых решений . За участие конечно благодарю . Ваше решение мне понравилось, но это решение я уже видел.
...
Рейтинг: 0 / 0
03.08.2016, 01:36
    #39285015
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariy
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:apply-templates select="/main//subgroup"/>

<xsl:template match="subgroup">
    <subgroup>
        <xsl:attribute name ="group"><xsl:apply-templates select=".." mode="path"/></xsl:attribute>
        <xsl:value-of select="text()"/>
    <subgroup>
</xsl:template>

<xsl:template match="group" mode="path">
    <xsl:apply-templates select=".." mode="path"/>/<xsl:value-of select="@name"/>
</xsl:template>

это первый шаг. в результате получится список из subgroup. его нужно загнать в переменную.
вторым шагом делается копия этой переменной с подсчетом количества значений и проставлением в double/
третьим шагом делается копия с исключением double=1.

Никто не хочет поспорить? Мне кажется есть проблема. Хотя бы в "<subgroup>". Буду признателен, если восторжествует жесткое решение проблемы, без ляпов и неопределенностей.
...
Рейтинг: 0 / 0
03.08.2016, 01:42
    #39285016
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
@bcМеня не интересует как определить производительностьЯ и не писал, что Вас интересует определение производительности. Я написал, что если производительность основной критерий, то нужно смотреть в сторону написания расширений
...
Рейтинг: 0 / 0
03.08.2016, 01:57
    #39285018
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
_Vasilisk_@bcМеня не интересует как определить производительностьЯ и не писал, что Вас интересует определение производительности. Я написал, что если производительность основной критерий, то нужно смотреть в сторону написания расширений

Я вас понял, давайте вместе дойдем до конечного результата. Напишите ваше оптимальное решение. Каким видите его вы. А дальше попробуем оценить насколько оно подходит под реальность. Будет красивое и четкое решение проблемы. А потом вдруг и появится еще более красивое решение. Будет интересно сравнить. Если в один запрос решать, то задача громоздкая, а XSLT язык довольно гибкий. Иногда чудеса на пустом месте рождаются, против всякой логики.
...
Рейтинг: 0 / 0
03.08.2016, 07:56
    #39285059
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
В форуме «Работа» и с указанием количественного значения благодарности мог бы поделиться своим решением по выводу дерева с бесконечным уровнем вложения. Подсчет количества значений value и фильтрацию единичных значений добавить несложно.
...
Рейтинг: 0 / 0
03.08.2016, 08:08
    #39285065
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Alibek B.,

Так и сделаю. Правда получаются одни разговоры. Никто не предложил четкого решения.
...
Рейтинг: 0 / 0
03.08.2016, 08:14
    #39285068
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
@bc Antonariy,

Хотелось бы твердых законченных решений, без советов, но с комментариями.а мне хотелось бы вертолет, пяток шлюх и собственный тропический остров. без советов и комментариев.

что было не лень, то и набросал.
...
Рейтинг: 0 / 0
03.08.2016, 08:16
    #39285070
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
@bcВаше решение мне понравилось, но это решение я уже видел.значит надо было выкладывать что есть, чтобы время не терять на повторы.
...
Рейтинг: 0 / 0
03.08.2016, 12:09
    #39285225
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariy@bcВаше решение мне понравилось, но это решение я уже видел.значит надо было выкладывать что есть, чтобы время не терять на повторы.

Проверь свое решение, это просто не то, что нужно по задаче. Тебе просто культурно дали понять, что не верно.
...
Рейтинг: 0 / 0
03.08.2016, 12:23
    #39285241
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
мой интерес к таким задачам заканчивается, когда я в общем и целом вижу путь решения и могу дать совет. проходить полный цикл - а нафига оно мне забесплатно надо?
...
Рейтинг: 0 / 0
03.08.2016, 13:22
    #39285316
@bc
@bc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интересное преобразование XSLT
Antonariyмой интерес к таким задачам заканчивается, когда я в общем и целом вижу путь решения и могу дать совет. проходить полный цикл - а нафига оно мне забесплатно надо?

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


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