Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml & xsl. рекурсия, помогите исправить код 
:(
    Опции темы
AlDev
Дата 20.11.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



объясните дураку...
я в xsl новичок, сижу и понять не могу...
Код

<?xml version="1.0" encoding="iso-8859-1"?><!-- DWXMLSource="forums.xml" --><!DOCTYPE xsl:stylesheet  [
    <!ENTITY nbsp   " ">
    <!ENTITY copy   "©">
    <!ENTITY reg    "®">
    <!ENTITY trade  "™">
    <!ENTITY mdash  "—">
    <!ENTITY ldquo  "“">
    <!ENTITY rdquo  "”"> 
    <!ENTITY pound  "£">
    <!ENTITY yen    "¥">
    <!ENTITY euro   "?">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Forums</title>
</head>

<body>
<xsl:apply-templates select="categories/category" mode="page" />
</body>
</html>

</xsl:template>

<xsl:template match="category" mode="page">
  Category: <b><xsl:value-of select="@name"/></b><br />
  <xsl:apply-templates select="forum" mode="tree" />
</xsl:template>

<xsl:template match="forum" mode="tree">
  &nbsp;&nbsp;<xsl:value-of select="@name"/><br />
  &nbsp;&nbsp;<xsl:apply-templates select="forum" mode="tree"/><br />
</xsl:template>

</xsl:stylesheet>


всё это выдает:
Код

<body>
Category: <b>test cat</b>
<br>
  &nbsp;&nbsp;test forum 1<br>

  &nbsp;&nbsp;
  &nbsp;&nbsp;test subforum<br>
  &nbsp;&nbsp;<br>
<br>
  &nbsp;&nbsp;test forum 2<br>
  &nbsp;&nbsp;<br>
  Category: <b>test cat 2</b>

<br>
  &nbsp;&nbsp;test forum 3<br>
  &nbsp;&nbsp;<br>
  Category: <b>test cat 3</b>
<br>
  &nbsp;&nbsp;test forum 4<br>
  &nbsp;&nbsp;<br>
</body>


xml файл содержит:
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<categories>
  <category name="test cat">
    <forum name="test forum 1">
      <forum name="test subforum"></forum>
    </forum>
    <forum name="test forum 2" />
  </category>
  <category name="test cat 2">
    <forum name="test forum 3" />
  </category>
  <category name="test cat 3">
    <forum name="test forum 4" />
  </category>
</categories>


собственно, проблема: как избавиться от лишних переносов строки?
задача состоит в отображении дерева.
PM MAIL WWW ICQ YIM MSN   Вверх
maxim1000
Дата 20.11.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 7
Всего: 110



а если просто выкинуть один перевод строки?
Код

<xsl:template match="forum" mode="tree">
  &nbsp;&nbsp;<xsl:value-of select="@name"/><br />
  &nbsp;&nbsp;<xsl:apply-templates select="forum" mode="tree"/>
</xsl:template>



--------------------
qqq
PM WWW   Вверх
AlDev
Дата 21.11.2005, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



тогда следующая нода, даже если она находится в родителе, будет на одном уровне с дочерней:
Код

 Category: test cat
  test forum 1
     test subforum
     test forum 2
   Category: test cat 2
  test forum 3
   Category: test cat 3
  test forum 4


Код

  Category: <b>test cat</b>
<br>
  &nbsp;&nbsp;test forum 1<br>

  &nbsp;&nbsp;
  &nbsp;&nbsp;test subforum<br>
  &nbsp;&nbsp;
  &nbsp;&nbsp;test forum 2<br>
  &nbsp;&nbsp;
  Category: <b>test cat 2</b>
<br>

  &nbsp;&nbsp;test forum 3<br>
  &nbsp;&nbsp;
  Category: <b>test cat 3</b>
<br>
  &nbsp;&nbsp;test forum 4<br>
  &nbsp;&nbsp;</body>
</html>


test forum 2 должен быть левее на 2 пробела.
PM MAIL WWW ICQ YIM MSN   Вверх
AlDev
Дата 21.11.2005, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



проблему решил вложеными таблицами:
Код

<body>
<table cellpadding="0" cellspacing="0">
  <xsl:apply-templates select="categories/category" mode="tree" />
</table>
</body>
</html>

</xsl:template>

<xsl:template match="category" mode="tree">
<tr>
  <td class="category"><a href="index.php?cid={@id}"><xsl:value-of select="@name"/></a></td>
  <tr><td><table>
    <xsl:apply-templates select="forum" mode="tree" />
  </table></td></tr>  
</tr>
</xsl:template>

<xsl:template match="forum" mode="tree">
<tr><td><a href="index.php?fid={@id}"><xsl:value-of select="@name"/></a></td></tr>
<tr><td><table><xsl:apply-templates select="forum" mode="tree"/></table></td></tr>
</xsl:template>

PM MAIL WWW ICQ YIM MSN   Вверх
maxim1000
Дата 21.11.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 7
Всего: 110



А... так вопрос больше про отступы...

я бы делал так:
Код

<xsl:template match="category" mode="page">
  Category: <b><xsl:value-of select="@name"/></b><br />
  <xsl:for-each select="forum">
    <xsl:call-template name="ProcessForum">
      <xsl:with-param name="ForumToProcess" select="."/>
      <xsl:with-param name="Indent">&nbsp;&nbsp;</xsl:with-param>
    </xsl:call-template>
  </xsl:for-each>
</xsl:template>

<xsl:template name="ProcessForum">
  <xsl:param name="ForumToProcess"/>
  <xsl:param name="Indent"/>
  <xsl:value-of select="$Indent"/><xsl:value-of select="$ForumToProcess/@name"/><br/>
  <xsl:for-each select="$ForumToProcess/forum">
    <xsl:call-template name="ProcessForum">
      <xsl:with-param name="ForumToProcess" select="."/>
      <xsl:with-param name="Indent">
        <xsl:value-of select="$Indent"/>&nbsp;&nbsp;
      </xsl:with-param>
    </xsl:call-template>
  </xsl:for-each>
</xsl:template>



--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1195 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.