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

Надо поулчить :

<main>

<para1>text
<para2>text
</para2>
</para1>
<para1>text
<para2>text
<para3>text
</para3>
</para2>
</para1>
<para1>text
</para1>

</main>

Понял что надо использовать following-sibling, но ничего не получается!
Может натолкнете на путь истинный?

Я предполагаю структуру:

С учетом того что максимум 4 вложения может быть (leve максимум 4):

<!--Для первого уровня-->
<xsl:template match=" ? ">
<para1>
<xsl:value-of select="."/>
<xsl:apply-templates></xsl:apply-templates>
</para1>
</xsl:template>

<!--Для второго уровня-->
<xsl:template match=" ? ">
<para2>
<xsl:value-of select="."/>
<xsl:apply-templates></xsl:apply-templates>
</para2>
</xsl:template>

<!--Для третьего уровня-->
<xsl:template match=" ? ">
<para3>
<xsl:value-of select="."/>
<xsl:apply-templates></xsl:apply-templates>
</para3>
</xsl:template>

<!--Для четвертого уровня (здесь нет apply-templates)-->
<xsl:template match=" ? ">
<para4>
<xsl:value-of select="."/>
</para4>
</xsl:template>

Не могу придумать условия
...
Рейтинг: 0 / 0
Трансформировать в иерархию
    #33928258
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="main">
 <main>
  <xsl:apply-templates select="para[@level='1']"/>
 </main>
</xsl:template>

<xsl:template match="para">
 <para1>
  <xsl:value-of select="."/>
  <xsl:if test="following-sibling::para[1]/@level &gt; '1'">
   <xsl:apply-templates select="following-sibling::para[1]" mode="insert"/>
  </xsl:if>
 </para1>
</xsl:template> 

<xsl:template match="para" mode="insert">
 <xsl:element name="{concat('para',@level)}">
  <xsl:value-of select="."/>
  <xsl:if test="following-sibling::para[1]/@level &gt; '1'">
   <xsl:apply-templates select="following-sibling::para[1]" mode="insert"/>
  </xsl:if>
 </xsl:element>
</xsl:template> 

</xsl:stylesheet>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Трансформировать в иерархию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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