powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Создание многоуровневого списка в html из xml данных
6 сообщений из 6, страница 1 из 1
Создание многоуровневого списка в html из xml данных
    #38269227
aleksex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые знатоки XML-парсинга, помогите разобраться с проблемкой: есть xml-файл, в котором храняться даннные из которых нужно в таком же виде слепить многоуровневый список...
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="windows-1251"?>
<kinds_to>
  <eto>
    <large>
      <point_1>Пункт 1</point_1>
      <middle>
        <point_2>Пункт 2</point_2>
        <small>
          <point_3>Пункт 3</point_3>
        </small>
      </middle>
    </large>
    <large>
      <point_1>Пункт 1</point_1>
      <middle>
        <point_2>Пункт 2</point_2>
        <small>
          <point_3>Пункт 3</point_3>
        </small>
      </middle>
    </large>
......................................................


Как видите, <large>, <middle>, <small> - теги разделяющие это все на "уровни", а <point_1>, <point_2>, <point_3> вложенности в которых храняться записи этих пунктов....
Вот конструктор этого дела, который хоть как-то работает:
Код: xml
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.
41.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:output encoding="windows-1251"/>
  <xsl:output omit-xml-declaration="no"/>
  <xsl:template match="kinds_to">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
        <title>
          ЕТО
        </title>
        <meta http-equiv="Content-Style-Type" content="text/css"/>
        <meta name="language" content="ru"/>
      </head>
      <body>
        <ol>
          <xsl:for-each select="eto/large/point_1">
            <li>
              <xsl:apply-templates/>
            </li>
          </xsl:for-each>
          <ul>
            <xsl:for-each select="eto/large/middle/point_2">
              <li type="circle">
                <xsl:apply-templates/>
              </li>
            </xsl:for-each>
            <ul>
              <xsl:for-each select="eto/large/middle/small/point_3">
                <li type="square">
                  <xsl:apply-templates/>
                </li>
              </xsl:for-each>
            </ul>
          </ul>
        </ol>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>


Вот как это выглядит в html
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>ЕТО </title>
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta name="language" content="ru" />
</head>
<body>
    <ol>
        <li>Пункт 1</li>
        <li>Пункт 1</li>
        <ul>
            <li type="circle">Пункт 2</li>
            <li type="circle">Пункт 2</li>
            <ul>
                <li type="square">Пункт 3</li>
                <li type="square">Пункт 3</li>
            </ul>
        </ul>
    </ol>
</body>
</html>

:
...проблема заключаться в том, чтобы запись в html велась поуровнево, так как и храняться данные, по нужному количеству екземпляров на уровень, возможно что их будет не по одному, но пока так! Должно получиться две "тройные" ступени.
Как оказалось пройтись обычным xsl:for-each, проблему не решило (если запихнуть один xsl:for-each в другой парсер ниче не строит)
Если этот вариант имеет право на жизнь, то подправьте, если нет подскажите как лучше, зараннее благодарен!
...
Рейтинг: 0 / 0
Создание многоуровневого списка в html из xml данных
    #38269251
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот ваш код делает то что нужно? Нет? Тогда какое он имеет право на жизнь?
И у li нет type, а есть он у ol и ul.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<xsl:template match="/">
  <html><body><xsl:apply-templates select="kinds_to/eto/*"/></body></html>
</xsl:template>
<xsl:template match="large">
  <ol><xsl:apply-templates select="*"/></ol>
</xsl:template>
<xsl:template match="middle|small">
  <li>
    <ul>
      <xsl:attribute name="type">
        <xsl:choose>
          <xsl:when test="name()='middle'">circle</xsl:when>
          <xsl:when test="name()='small'">square</xsl:when>
        </xsl:choose>
      </xsl:attribute>
      <xsl:apply-templates select="*"/>
    </ul>
  </li>
</xsl:template>
<xsl:template match="point_1|point_2|point_3">
  <li><xsl:value-of select="text()"/></li>
</xsl:template>
...
Рейтинг: 0 / 0
Создание многоуровневого списка в html из xml данных
    #38269659
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Позволю себе слегка причесать ваш код:

Код: xml
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.
<xsl:template match="/">
<html>
<head>
<style>
.middle {
  list-style-type: circle;
}
.small {
  list-style-type: square
}
</style>
</head>
<body>
  <xsl:apply-templates select="/kinds_to/eto/*"/>
</body>
</html>
</xsl:template>
<xsl:template match="large">
  <ol>
    <xsl:apply-templates />
  </ol>
</xsl:template>
<xsl:template match="middle|small">
  <li>
    <ul class="{name()}">
      <xsl:apply-templates />
    </ul>
  </li>
</xsl:template>
<xsl:template match="point_1|point_2|point_3">
  <li>
    <xsl:value-of select="text()" />
  </li>
</xsl:template>
...
Рейтинг: 0 / 0
Создание многоуровневого списка в html из xml данных
    #38270880
aleksex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, Большое спасибо))) были лишние <li-айчики> вот тут:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="middle|small">
  <li>
    <ul class="{name()}">
      <xsl:apply-templates />
    </ul>
  </li>
</xsl:template>


а так все файно)))
...
Рейтинг: 0 / 0
Создание многоуровневого списка в html из xml данных
    #38270885
aleksex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не все файно...((( <ol> каждый раз нумеруется с 1...вторая тройка должна начинаться с 2.
...
Рейтинг: 0 / 0
Создание многоуровневого списка в html из xml данных
    #38270943
aleksex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил, упрощать код фантазии нет, спасибо всем за помощь!
Код: xml
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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:output encoding="windows-1251"/>
  <xsl:output omit-xml-declaration="no"/>
  <xsl:template match="/">
    <html>
      <head>
        <style>
          .middle {
          list-style-type: circle;
          }
          .small {
          list-style-type: square
          }
        </style>
      </head>
      <body>
        <xsl:apply-templates select="/kinds_to/*"/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="eto">
    <ol>
      <xsl:apply-templates />
    </ol>
  </xsl:template>
  <xsl:template match="eto/large/point_1">
    <li>
      <xsl:value-of select="text()" />
    </li>
  </xsl:template>
  <xsl:template match="eto/large/middle">
    <ul class="{name()}">
      <xsl:apply-templates />
    </ul>
  </xsl:template>
  <xsl:template match="eto/large/middle/point_2">
    <li>
      <xsl:value-of select="text()" />
    </li>
  </xsl:template>
  <xsl:template match="eto/large/middle/small">
    <ul class="{name()}">
      <xsl:apply-templates />
    </ul>
  </xsl:template>
  <xsl:template match="eto/large/middle/small/point_3">
    <li>
      <xsl:value-of select="text()" />
    </li>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Создание многоуровневого списка в html из xml данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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