Re: Бесконечное дерево
От: Koenig inhabitant Россия  
Дата: 31.07.02 13:29
Оценка: 2 (1)
Здравствуйте Ed Sin, Вы писали:

ES>Можно ли как-то с помощью xsl выводить дерево, записанное в xml, которое может быть сколь угодно большим. Как организовать обход xml файла? И как тогда именовать xml теги?

XML:
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="t.xsl"?>
<root>
<group id="0">
        <group id="1">
                <group id="1.1">
                        <user id="i1.1-1">i1.1-1</user>
                </group>
                <group id="1.2"></group>
                <group id="1.3">
                        <user id="i1.3-1">i1.3-1</user>
                        <user id="i1.3-2">i1.3-2</user>
                        <group id="1.3.1">
                                <user id="i1.3.1-1">i1.3.1-1</user>
                        </group>
                </group>
                <user id="i1-1">i1-1</user>
        </group>
        <group id="2"></group>
        <group id="3">
                <group id="3.1">
                        <user id="i3.1-1">i3.1-1</user>
                </group>
        </group>
</group>
</root>


XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="html"/>
        <xsl:template match="/">
                <html>
                        <body>
                                List of groups:
                                <xsl:apply-templates select="/root/group"/>
                                List of items:
                                <ul>
                                <xsl:for-each select="//*/user">
                                        <xsl:sort data-type="text"/>
                                        <xsl:call-template name="list"/>
                                </xsl:for-each>
                                </ul>
                        </body>
                </html>
        </xsl:template>

        <xsl:template match="group">
                <ul>
                        <li>
                        <xsl:value-of select="name()"/>-<xsl:value-of select="@id"/>
                        <xsl:for-each select="./group">
                                <xsl:apply-templates select="."/>
                                <xsl:for-each select="./user">
                                        <ul>
                                        <xsl:apply-templates select="."/></ul>
                                </xsl:for-each>
                        </xsl:for-each>
                        </li>
                </ul>
        </xsl:template>

        <xsl:template match="user">
                <li><b>(
                <xsl:value-of select="name()"/>-<xsl:value-of select="@id"/>
                )</b></li>
        </xsl:template>

        <xsl:template name="list">
                <li><xsl:value-of select="@id"/></li>
        </xsl:template>
</xsl:stylesheet>


Про это спрашивал? Если нет, то уточни вопрос.
"Say good-bye, go home, jerk off and go to bed".(c)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.