Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Создание многоуровневого списка в html из xml данных / 6 сообщений из 6, страница 1 из 1
22.05.2013, 23:40
    #38269227
aleksex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
Уважаемые знатоки 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
23.05.2013, 00:12
    #38269251
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
Этот ваш код делает то что нужно? Нет? Тогда какое он имеет право на жизнь?
И у 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
23.05.2013, 11:22
    #38269659
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
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
23.05.2013, 21:20
    #38270880
aleksex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
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
23.05.2013, 21:27
    #38270885
aleksex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
не все файно...((( <ol> каждый раз нумеруется с 1...вторая тройка должна начинаться с 2.
...
Рейтинг: 0 / 0
23.05.2013, 22:08
    #38270943
aleksex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание многоуровневого списка в html из xml данных
Проблему решил, упрощать код фантазии нет, спасибо всем за помощь!
Код: 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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Создание многоуровневого списка в html из xml данных / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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