Бесконечное дерево
От: Ed Sin  
Дата: 23.07.02 07:53
Оценка:
Можно ли как-то с помощью xsl выводить дерево, записанное в xml, которое может быть сколь угодно большим. Как организовать обход xml файла? И как тогда именовать xml теги?
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)
Re[2]: Бесконечное дерево
От: Ed Sin  
Дата: 01.08.02 09:49
Оценка:
Здравствуйте Koenig inhabitant, Вы писали:

KI>Здравствуйте Ed Sin, Вы писали:


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

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


KI>XSL:

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

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

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

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


KI>Про это спрашивал? Если нет, то уточни вопрос.

Да, я посмотрел — это то, что было нужно. Спасибо. Но есть одна проблема. Надо было уточнить это с самого начала. Дело в том, что мне нужно что это дерево строилось в пространстве имен /www.w3.org/TR/WD-xsl под эксплорер 5 что бы оно корректно отображалось у всех пользователей (дерево на сервере).
Re[2]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 06.08.02 15:11
Оценка: 4 (2)
Здравствуйте Koenig inhabitant, Вы писали:

Странный я. Не люблю, когда используют процедурные фичи в непроцедурном языке :о) То бишь без xsl:for-each можно обойтись.

<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:apply-templates select="//user/@id" />
      </ul>
      </body>
      </html>
   </xsl:template>

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

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

   <xsl:template match="@id">
      <li><xsl:value-of select="."/></li>
   </xsl:template>
</xsl:stylesheet>
It's nice to be important, but it's more important to be nice.
Re[3]: Бесконечное дерево
От: Ed Sin  
Дата: 07.08.02 05:35
Оценка:
Большое спасибо CTPEKO3Е. Я уверен, что все работает просто отлично. Но опять же используя пространство имен, которое мне не доступно. Как сделать тоже самое в простанстве имен http://www.w3.org/TR/WD-xsl. Вот такой трабл.
Re[4]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 07.08.02 13:48
Оценка:
Здравствуйте Ed Sin, Вы писали:

ES>Большое спасибо CTPEKO3Е. Я уверен, что все работает просто отлично. Но опять же используя пространство имен, которое мне не доступно. Как сделать тоже самое в простанстве имен http://www.w3.org/TR/WD-xsl. Вот такой трабл.


Хм... WD — это же "Working Draft", то есть черновик... Что за странное требование? Почему нелья в стандартном неймспейсе работать?


:???:
It's nice to be important, but it's more important to be nice.
Re[5]: Бесконечное дерево
От: Ed Sin  
Дата: 08.08.02 09:18
Оценка:
Насколько я понимаю ( не претендую на истину ), Експлорер 5 ( например ) не распознает наймспейс, отличный от как раз www.w3.org/TR/WD-xsl. Конечно я могу поставить парсер ( например 3.0 ) и работать в нормальном неймспейсе. Но дело в том, что клиентские машины ( у которых парсера нет ) не смогут посмотреть xml c новым неймспесем в xsl. Поэтому приходиться использовать тот неймспейс, который доступен всем машинам.
Вроде бы так.
Если есть решение или я в чем то не прав, то рад услышать опровержения моего предположения ( вообщем-то, проверенного практикой ).
Re[6]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 08.08.02 13:50
Оценка:
Здравствуйте Ed Sin, Вы писали:

ES>Насколько я понимаю ( не претендую на истину ), Експлорер 5 ( например ) не распознает наймспейс, отличный от как раз www.w3.org/TR/WD-xsl. Конечно я могу поставить парсер ( например 3.0 ) и работать в нормальном неймспейсе. Но дело в том, что клиентские машины ( у которых парсера нет ) не смогут посмотреть xml c новым неймспесем в xsl. Поэтому приходиться использовать тот неймспейс, который доступен всем машинам.

ES>Вроде бы так.
ES>Если есть решение или я в чем то не прав, то рад услышать опровержения моего предположения ( вообщем-то, проверенного практикой ).

Вот тут написано об этой проблеме. Я думаю, что нетрудно будет изменить вышеприведённые xsl'и?
It's nice to be important, but it's more important to be nice.
Re[7]: Бесконечное дерево
От: Ed Sin  
Дата: 09.08.02 07:21
Оценка:
Я посмотрел этот сайт — достаточно интересное место. Спасибо за ссылку. Но все равно это начальной проблемы решить не может. Там описаны те элементы, которые работают в ИЕ5 не с ними, вообщем-то, особо не развернешься. Например такой элемент ( который бросился мне в глаза ), как <xsl:value-of select="name()"/> не сработает — ИЕ5 скажет, что не понимает, что такое name(). Можно немного аппроксимировать под ИЕ5, но на некоторые элементы просто не найдется замены.
И, вообщем-то, снова стаю на начале пути ( хотя уже знаю, что дорога ведущая вправо — неверна ) и задаю все тот же насущный ( для меня ) вопрос — как же, все-таки, под ИЕ5 написать xsl, который строит бесконечное дерево?
Re[8]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 09.08.02 14:12
Оценка:
Здравствуйте Ed Sin, Вы писали:

ES>Я посмотрел этот сайт — достаточно интересное место. Спасибо за ссылку. Но все равно это начальной проблемы решить не может. Там описаны те элементы, которые работают в ИЕ5 не с ними, вообщем-то, особо не развернешься. Например такой элемент ( который бросился мне в глаза ), как <xsl:value-of select="name()"/> не сработает — ИЕ5 скажет, что не понимает, что такое name(). Можно немного аппроксимировать под ИЕ5, но на некоторые элементы просто не найдется замены.

ES>И, вообщем-то, снова стаю на начале пути ( хотя уже знаю, что дорога ведущая вправо — неверна ) и задаю все тот же насущный ( для меня ) вопрос — как же, все-таки, под ИЕ5 написать xsl, который строит бесконечное дерево?

Можно пойти другим путём — делать все xsl трансформации на сервере. То есть отдавать IE5 клиенту уже сгенерённый HTML. И забыть про WD-xsl.
It's nice to be important, but it's more important to be nice.
Re[9]: Бесконечное дерево
От: Ed Sin  
Дата: 09.08.02 16:31
Оценка:
Вот и я снова со своими проблемами. Невероятно, но сообщение о бесконечном дереве — это второе сообщение. А первое было про парсер. Как раз там я и спрашивал про то, что будет, если на сервере есть парсер, а на клиенте нет. Так вот один участник форума мне посоветовал формировать html страницу на сервере и отправлять ее клиенту в чистом виде. Может быть я повторюсь, что я балбес, но дело в том, что я не знаю как это делать. Что-то мне казалось, что это делается через jsp, например, но прочитав немного про JavaServer Pages, не нашел ответа. Так я продолжил изучать не соответствующее стандарту пространство имен ИЕ5.
Если есть какие идеи, и если я еще не совсем достал то прошу поделиться ими.
Спасибо.
Re[10]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 09.08.02 16:51
Оценка:
Здравствуйте Ed Sin, Вы писали:

ES>Вот и я снова со своими проблемами. Невероятно, но сообщение о бесконечном дереве — это второе сообщение. А первое было про парсер. Как раз там я и спрашивал про то, что будет, если на сервере есть парсер, а на клиенте нет. Так вот один участник форума мне посоветовал формировать html страницу на сервере и отправлять ее клиенту в чистом виде. Может быть я повторюсь, что я балбес, но дело в том, что я не знаю как это делать. Что-то мне казалось, что это делается через jsp, например, но прочитав немного про JavaServer Pages, не нашел ответа. Так я продолжил изучать не соответствующее стандарту пространство имен ИЕ5.


Можно и на JSP, можно и на ASP. На чём угодно можно...

Надо идти читать в сети то, что посвящено программированию XML.

А откуда у тебя берётся XML? Вот тот, что с бесконечным деревом? Его кто генерит?
It's nice to be important, but it's more important to be nice.
Re[10]: Бесконечное дерево
От: CTPEKO3A Великобритания  
Дата: 09.08.02 18:22
Оценка:
Вот. Специально порыскал и нашёл:XML and XSL Samples and Demos

Как искал? www.google.com, "ASP XML XSL Sample" :o)
It's nice to be important, but it's more important to be nice.
Re[11]: Бесконечное дерево
От: Ed Sin  
Дата: 12.08.02 06:16
Оценка:
Надо по подробнее разобраться с jsp, т.к. язык java я, можно сказать, знаю. Наш сайт содержит документацию по одному проекту. Документов достаточно много ( несколько тысяч ) и каждый документ находится в каком-то смысловом разделе ( т.е. документ по финансовой части не должен находиться в разделе "Для программистов" ). Постоянно появляются все новые документы и новые разделы и подразделы. Поэтому иногда появляется новый уровень вложенности ( на данный момент 5 уровней вложенноси ). Чтобы написать универсальный xsl, нужно исходить из того, что уровней вложенности может быть любое количество. XML представляет структуру дерева, по которому пользователь спускается до нужного документа.
Вот.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.