powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерарахический список
3 сообщений из 3, страница 1 из 1
Иерарахический список
    #36831995
walek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Есть XML
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<?xml version="1.0" encoding="windows-1251" ?>
<PortDivList>
<PortDiv PDID="108" ParentPDID="">Электронная газета
     <PortDiv PDID="124" ParentPDID="108">Финансовая корпорация
          <PortDiv PDID="125" ParentPDID="124">Страница Президента
          </PortDiv>
          <PortDiv PDID="141" ParentPDID="124">Объединение
          </PortDiv>
          <PortDiv PDID="142" ParentPDID="124">Деловые центры Корпорации
          </PortDiv>
          <PortDiv PDID="126" ParentPDID="124">Стратегия Финансовой корпорации
               <PortDiv PDID="127" ParentPDID="126">Послание Президента Корпорации
               </PortDiv>
               <PortDiv PDID="128" ParentPDID="126">Стратегия в динамике
               </PortDiv>
               <PortDiv PDID="129" ParentPDID="126">Стратегия в лицах
               </PortDiv>
          </PortDiv>
          <PortDiv PDID="130" ParentPDID="124">Описание раздела
          </PortDiv>
          <PortDiv PDID="131" ParentPDID="124">История Корпрорации
          </PortDiv>
     </PortDiv>
     <PortDiv PDID="143" ParentPDID="108">Корпоративный Благотворительный Фонд
     </PortDiv>
     <PortDiv PDID="144" ParentPDID="108">Читальный зал
          <PortDiv PDID="145" ParentPDID="144">Инструменты управления
          </PortDiv>
          <PortDiv PDID="146" ParentPDID="144">Лидерство
          </PortDiv>
          <PortDiv PDID="147" ParentPDID="144">Самоменеджмент
          </PortDiv>
          <PortDiv PDID="148" ParentPDID="144">Управление временем
          </PortDiv>
          <PortDiv PDID="149" ParentPDID="144">Лучшие практики
          </PortDiv>
          <PortDiv PDID="150" ParentPDID="144">Полезные советы
          </PortDiv>
     </PortDiv>
</PortDiv>
</PortDivList>

Нужно вывести иерархический список.
В первый раз сталкиваюсь с одинаковыми названиями нод. Что-то я в ступоре.
Как вывести иерархично?
Просто вывожу
Код: plaintext
1.
2.
<xsl:template match="PortDivList">
	<xsl:value-of select="PortDiv" />
</xsl:template>

А он мне уже в соурс выводит неотформатированное дерево
<?xml version="1.0" encoding="windows-1251" ?>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Электронная газета
     Финансовая корпорация
          Страница Президента
           Объединение
           Деловые центры Корпорации
           Стратегия Финансовой корпорации
               Послание Президента Корпорации
                Стратегия в динамике
                Стратегия в лицах
                 Описание раздела
           История Корпрорации
            Корпоративный Благотворительный Фонд
      Читальный зал
          Инструменты управления
           Лидерство
           Самоменеджмент
           Управление временем
           Лучшие практики
           Полезные советы

Как быть?
...
Рейтинг: 0 / 0
Иерарахический список
    #36832856
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
walek,

вопрос не оч понятен, что не получается?

Код: 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.
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.
54.
55.
56.
57.
58.
59.
60.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns="http://tvservices.microsoft.com/epg/glf">
    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>Hirarchy</TITLE>
                <STYLE>
                    .hitem { margin-left: 40px; }
                    .hide { display: none; }
                </STYLE>
                <SCRIPT TYPE="text/javascript">
                    <xsl:text disable-output-escaping="yes">
                    <![CDATA[
                    var show = function( obj, id )
                    {
                        var flag = obj.innerHTML == '[+]';
                        var dstyle = flag ? 'block' : 'none';
                        var a = document.getElementsByName( id );
                        for( i =  0 , len = a.length; i < len; i++ )
                            a[i].style.display = dstyle;
                        obj.innerHTML = flag ? '[-]' : '[+]';
                    }
                    ]]>
                    </xsl:text>
                </SCRIPT>
            </HEAD>
            <BODY>
                <xsl:apply-templates select="/PortDivList/PortDiv" mode="draft1" />
                <OL>
                    <xsl:apply-templates select="/PortDivList/PortDiv" mode="draft2" />
                </OL>
            </BODY>
        </HTML>
    </xsl:template>

    <xsl:template match="PortDiv" mode="draft1">
        <DIV CLASS="hitem" ID="{@ParentPDID}" NAME="{@ParentPDID}">
            <xsl:attribute name="CLASS">
                <xsl:text>hitem</xsl:text>
                <xsl:if test="/PortDivList/PortDiv[1]/@PDID != @PDID">
                    <xsl:text> hide</xsl:text>
                </xsl:if>
            </xsl:attribute>
            <xsl:if test="PortDiv">
                <A HREF="javascript://" ONCLICK="show(this,'{@PDID}')">[+]</A>
            </xsl:if>
            <xsl:value-of select="text()" />
            <xsl:apply-templates select="PortDiv" mode="draft1" />
        </DIV>
    </xsl:template>
    <xsl:template match="PortDiv" mode="draft2">
            <LI>
                <xsl:value-of select="text()" />
                <xsl:if test="PortDiv">
                <OL>
                    <xsl:apply-templates select="PortDiv" mode="draft2" />
                </OL>
                </xsl:if>
            </LI>
    </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Иерарахический список
    #36832912
walek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Андрей.
Вы меня правильно поняли.

Забыл, что можно шаблон может вызывать сам себя.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Hirarchy</title>
            </head>
            <body>
                <ul><xsl:apply-templates select="/PortDivList/PortDiv" /></ul>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="PortDiv">
        <li>
            <xsl:value-of select="text()" />
            <xsl:if test="PortDiv">
                <ul><xsl:apply-templates select="PortDiv" /></ul>
            </xsl:if>
        </li>
    </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерарахический список
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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