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

Исходный 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
Интересное преобразование XSLT
    #39284864
@bc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@bc
Гость
Хочу добавить три очевидных условия

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

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

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

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

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

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

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

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

Шифровать не стремился. Когда продумывал формулировку, убрал избыточность описания. Случайно получился ребус.
Прошу прощения.
Не хотел показаться заумным.
...
Рейтинг: 0 / 0
Интересное преобразование XSLT
    #39284973
Фотография 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.
...
Рейтинг: 0 / 0
Интересное преобразование XSLT
    #39284974
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вас интересует производительность, то на любом ЯП напишите две функции по работе с ассоциативным массивом. Далее одним проходом подсчитайте количество всех value, а вторым - выведите резуьтат
...
Рейтинг: 0 / 0
Интересное преобразование XSLT
    #39285002
@bc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@bc
Гость
_Vasilisk_,

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

Хотелось бы твердых законченных решений, без советов, но с комментариями. То есть, абсолютно твердо работающее решение проблемы, от начала и до конца. Я это указывал в теме. У меня есть три решения и все они работают медленно, даже на серьезных серверах. Подчеркну, данных должно обрабатываться катастрофически много. Поэтому задача на любителя красивых решений . За участие конечно благодарю . Ваше решение мне понравилось, но это решение я уже видел.
...
Рейтинг: 0 / 0
Интересное преобразование XSLT
    #39285015
@bc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@bc
Гость
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
Интересное преобразование XSLT
    #39285016
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@bcМеня не интересует как определить производительностьЯ и не писал, что Вас интересует определение производительности. Я написал, что если производительность основной критерий, то нужно смотреть в сторону написания расширений
...
Рейтинг: 0 / 0
Интересное преобразование XSLT
    #39285018
@bc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@bc
Гость
_Vasilisk_@bcМеня не интересует как определить производительностьЯ и не писал, что Вас интересует определение производительности. Я написал, что если производительность основной критерий, то нужно смотреть в сторону написания расширений

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

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

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

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

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

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


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