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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить XSL 
:(
    Опции темы
Vadik
Дата 6.8.2004, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.2.2003

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



Есть XML файл вида:
Код

<?xml version="1.0" encoding="windows-1251"?>
<Data M="5">
<Cell value="1" />
<Cell value="2" />
<Cell value="3" />
<Cell value="4" />
<Cell value="5" />
<Cell value="6" />
<Cell value="7" />
<Cell value="8" />
<Cell value="9" />
…
<Cell value="N" />
</Data>


Необходимо составить такой XSL чтобы на выходе получилось что-то типа такого:
Код

<table>
<tr>
 <td>1</td>
 <td>2</td>
 <td>3</td>
…
 <td>M</td>
</tr>
<tr>
 <td>M+1</td>
 <td>M+2</td>
 <td>M+3</td>
…
 <td>M+M</td>
</tr>
…
</table>


Я пытаюсь решить эту проблему при помощи xsl:for-each и position() но никак не получается.

Чувствую что истина где-то рядом, но не могу её найти.

Подскажите, плиз…

PM MAIL   Вверх
3,14
Дата 6.8.2004, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



За абсолютную точность не ручаюсь, но идею демонстрирует верно - нужно заменить циклы рекурсией:

Код

<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp ' '>
]>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

 <xsl:template match="/">

   <table>  
     <xsl:call-template name="loop1">
       <xsl:with-param name="max" select="Data/@M"/>
       <xsl:with-param name="ps" select="Data/@M"/>
     </xsl:call-template>
   </table>

 </xsl:template>

 <xsl:template name="loop1">
   <xsl:param name="max"/>
   <xsl:param name="ps"/>
   <xsl:if test="$ps &gt; 0">
      <xsl:call-template name="loop1">
        <xsl:with-param name="max" select="$max"/>
        <xsl:with-param name="ps" select="$ps+(-1)"/>
      </xsl:call-template>
   </xsl:if>
   <tr>
     <xsl:call-template name="loop2">
        <xsl:with-param name="start" select="$ps"/>
        <xsl:with-param name="ps" select="$max"/>
     </xsl:call-template>
   </tr>
 </xsl:template>

 <xsl:template name="loop2">
   <xsl:param name="start"/>
   <xsl:param name="ps"/>
   <xsl:if test="$ps &gt; 0">
      <xsl:call-template name="loop2">
        <xsl:with-param name="start" select="$start"/>
        <xsl:with-param name="ps" select="$ps+(-1)"/>
      </xsl:call-template>
   </xsl:if>
   <td><xsl:value-of select="$start+$ps"></td>
 </xsl:template>

</xsl:stylesheet>



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




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


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

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