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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод таблицы с помощью XSL 
:(
    Опции темы
DimaSiK
Дата 8.10.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите организовать вывод такой вот структуры таблицы:
Код

<table width="200" border="1">
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>

Допустим у меня для вывода имеется 4 элемента, тогда у меня при выводе будет один полный блок: 
Код

 <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>

и один не полный:
 
Код

 <tr>
    <td>&nbsp;</td>
 </tr>

Как мне организовать это с помощью XSL? 


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
Shedar
Дата 8.10.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Например так:
есть xml документ
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?> 
<root>
 <item>1</item>
 <item>2</item>
 <item>3</item>
 <item>4</item>
</root>


И соответственно xslt
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:variable name="colCount">3</xsl:variable>
<xsl:variable name="itemCount"><xsl:value-of select="count(/root/item)" /></xsl:variable>
<xsl:variable name="rowCount"><xsl:value-of select="ceiling($itemCount div $colCount)" /></xsl:variable>
<table>
<xsl:call-template name="forRows">
      <xsl:with-param name="cols" select="$colCount"/>
      <xsl:with-param name="n" select="$rowCount"/>
</xsl:call-template>
</table>
</xsl:template>

<xsl:template name="forRows">
    <xsl:param name="i" select="0"/>
    <xsl:param name="n" select="0"/>
    <xsl:param name="cols" select="0"/>
    <xsl:if test="$i &lt; $n">
        <tr>
        <xsl:call-template name="forCols">
              <xsl:with-param name="row" select="$i"/>
              <xsl:with-param name="n" select="$cols"/>
        </xsl:call-template>
        </tr>
        <xsl:call-template name="forRows">
              <xsl:with-param name="i" select="$i + 1"/>
              <xsl:with-param name="n" select="$n"/>
              <xsl:with-param name="cols" select="$cols"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<xsl:template name="forCols">
<xsl:param name="row" select="0"/>
<xsl:param name="i" select="0"/>
<xsl:param name="n" select="0"/>
<xsl:if test="$i &lt; $n">
<td>
<xsl:if test="($row*$n+$i) &lt; count(/root/item)">
<xsl:value-of select="/root/item[$row*$n+$i+1]" />
</xsl:if>
<xsl:if test="($row*$n+$i) &gt;= count(/root/item)">
-
</xsl:if>
</td>
<xsl:call-template name="forCols">
      <xsl:with-param name="i" select="$i + 1"/>
      <xsl:with-param name="n" select="$n"/>
      <xsl:with-param name="row" select="$row"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

</xsl:stylesheet>


PM MAIL WWW ICQ   Вверх
DimaSiK
Дата 8.10.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если мне требуется между тегами <td></td> выводить вот такой вот скрипт 
Код

<script type="text/javascript">
                                 var s1 = new SWFObject("./../player.swf","single","300","170","7");
                                 s1.addParam("allowfullscreen","true");
                                 s1.addVariable("file","./video/test.flv");
                                 s1.addVariable("image","./preview/preview.jpg");
                                 s1.addVariable("width","300");
                                 s1.addVariable("height","170");
                                 s1.write("player1");
</script>

причем переменная s1 меняется, то есть в первой ячейке будет s1, далее s2 и так далее + меняются параметры file и image, как то сделать?


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
Shedar
Дата 8.10.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно примерно так:
xml:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?> 
<root>
 <item>
   <file>test.flv</file>
   <image>preview_test.jpg</image>
 </item>
 <item>
   <file>smile.flv</file>
   <image>preview_smile.jpg</image>
 </item>
 <item>
   <file>cool.flv</file>
   <image>preview_cool.jpg</image>
 </item>
 <item>
   <file>mega.flv</file>
   <image>preview_mega.jpg</image>
 </item>
</root>


xsl:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:variable name="colCount">3</xsl:variable>
<xsl:variable name="itemCount"><xsl:value-of select="count(/root/item)" /></xsl:variable>
<xsl:variable name="rowCount"><xsl:value-of select="ceiling($itemCount div $colCount)" /></xsl:variable>
<table>
<xsl:call-template name="forRows">
      <xsl:with-param name="cols" select="$colCount"/>
      <xsl:with-param name="n" select="$rowCount"/>
</xsl:call-template>
</table>
</xsl:template>

<xsl:template name="forRows">
    <xsl:param name="i" select="0"/>
    <xsl:param name="n" select="0"/>
    <xsl:param name="cols" select="0"/>
    <xsl:if test="$i &lt; $n">
        <tr>
        <xsl:call-template name="forCols">
              <xsl:with-param name="row" select="$i"/>
              <xsl:with-param name="n" select="$cols"/>
        </xsl:call-template>
        </tr>
        <xsl:call-template name="forRows">
              <xsl:with-param name="i" select="$i + 1"/>
              <xsl:with-param name="n" select="$n"/>
              <xsl:with-param name="cols" select="$cols"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<xsl:template name="forCols">
<xsl:param name="row" select="0"/>
<xsl:param name="i" select="0"/>
<xsl:param name="n" select="0"/>
<xsl:if test="$i &lt; $n">
<td>
<xsl:if test="($row*$n+$i) &lt; count(/root/item)">
<xsl:variable name="ind"><xsl:value-of select="$row*$n+$i+1"/></xsl:variable>
<script type="text/javascript">
                                 var s<xsl:value-of select="$ind" /> = new SWFObject("./../player.swf","single","300","170","7");
                                 s<xsl:value-of select="$ind" />.addParam("allowfullscreen","true");
                                 s<xsl:value-of select="$ind" />.addVariable("file","./video/<xsl:value-of select="/root/item[$row*$n+$i+1]/file"/>");
                                 s<xsl:value-of select="$ind" />.addVariable("image","./preview/<xsl:value-of select="/root/item[$row*$n+$i+1]/image"/>");
                                 s<xsl:value-of select="$ind" />.addVariable("width","300");
                                 s<xsl:value-of select="$ind" />.addVariable("height","170");
                                 s<xsl:value-of select="$ind" />.write("player1");
</script>

</xsl:if>
<xsl:if test="($row*$n+$i) &gt;= count(/root/item)">
-
</xsl:if>
</td>
<xsl:call-template name="forCols">
      <xsl:with-param name="i" select="$i + 1"/>
      <xsl:with-param name="n" select="$n"/>
      <xsl:with-param name="row" select="$row"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

PM MAIL WWW ICQ   Вверх
DimaSiK
Дата 9.10.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Большое спасибо, все помогло, разобрался!


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

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

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

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

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

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


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

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


 




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


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

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