powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нумерация?
7 сообщений из 7, страница 1 из 1
Нумерация?
    #34311997
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть
<root>
<s a="1">text</s>
<s a="2">text</s>
<s a="3">text</s>
<s a="2">text</s>
<s a="1">text</s>
<s a="1">text</s>
<s a="2">text</s>
<s a="2">text</s>
<s a="3">text</s>
</root>

Надо получить:
<root>
<s>1 text</s>
<s>1.1 text</s>
<s>1.1.1 text</s>
<s>1.2 text</s>
<s>2 text</s>
<s>3 text</s>
<s>3.1 text</s>
<s>3.2 text</s>
<s>3.2.1 text</s>
</root>

Запарился!
Ни черта не выходит.
Может есть идеи как это воплотить?
...
Рейтинг: 0 / 0
Нумерация?
    #34312447
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С нумерацией проблему можно решить, если разложить в иерархию.
<xsl:number format="1.1.1" level="multiple">

Вопрос: как можно разложить в иерархию?
...
Рейтинг: 0 / 0
Нумерация?
    #34312791
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть одно решение, но оно не удовлетворяет полностью задаче!
Голову сломал.

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

<xsl:template match="root">
<root>
<xsl:apply-templates select="s[@a='1']"/>
</root>
</xsl:template>

<xsl:template match="s">
<s>
<xsl:value-of select="."/>
<xsl:if test="following-sibling::s[1]/@a > '1'">
<xsl:apply-templates select="following-sibling::s[1]" mode="insert"/>
</xsl:if>
</s>
</xsl:template>

<xsl:template match="s" mode="insert">
<s>
<xsl:value-of select="."/>
<xsl:if test="following-sibling::s[1]/@a > ./@a">
<xsl:apply-templates select="following-sibling::s[1]" mode="insert"/>
</xsl:if>
</s>
<xsl:if test="following-sibling::s [1] /@a = ./@a">
<xsl:apply-templates select="following-sibling::s[1]" mode="insert"/>
</xsl:if>
</xsl:template>

Проблема вот в чем:
При таком варианте:
1
2
3
2

Последняя двойка не попадает. (При снижении уровня)
вместо [1] в <xsl:if test="following-sibling::s [1] /@a = ./@a"> нужно что-то добавить, но никак не могу сформулировать
...
Рейтинг: 0 / 0
Нумерация?
    #34315420
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, как вы считаете данный шаблон в таком виде можно модернизировать?
Или необходим другой подход?

На зарубежных ресурсах я нашел преобразование в иерархию, только c аттрибутами (id,parent_id)

У меня немного другая структура
В аттрибуте храниться уровень вложенности (причем неможет быть скачков вверх через 1)
...
Рейтинг: 0 / 0
Нумерация?
    #34315424
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильнее - Скачков вглубь.
...
Рейтинг: 0 / 0
Нумерация?
    #34315496
Kotry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы их сначала опустил вглубь на том логическом уровне котором они должны быть, а потом уже нумеровал
...
Рейтинг: 0 / 0
Нумерация?
    #34316869
pavelblk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С нумерацией я разобрался!
Правильно, необходимо сначало превратить это во вложенность, а затем пронумеровать.
Так вот проблема сделать иерархию:
Из
<root>
<s a="1">text1</s>
<s a="2">text2</s>
<s a="1">text3</s>
<s a="2">text4</s>
<s a="2">text5</s>
<s a="3">text6</s>
</root>

В

<root>
<s a="1">text1
<s a="2">text2</s>
</s>
<s a="1">text3
<s a="2">text4</s>
<s a="2">text5
<s a="3">text6</s>
</s>
</s>
</root>
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нумерация?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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