Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерарахический список / 3 сообщений из 3, страница 1 из 1
06.09.2010, 15:31
    #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
06.09.2010, 20:25
    #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
06.09.2010, 21:14
    #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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерарахический список / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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