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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форматирование таблицы 
:(
    Опции темы
walek
Дата 11.11.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Друзья, прошу вашей помощи.
Есть XML вида:

Код

<?xml version="1.0" ?>
<MMWEATHER>
<REPORT type="frc3">
<TOWN index="28722" sname="%D3%F4%E0" latitude="55" longitude="56">

<FORECAST day="5" month="11" year="2009" hour="6" tod="1" predict="12" weekday="5">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="757" min="755"/>
<TEMPERATURE max="-4" min="-6"/>
<WIND min="3" max="6" direction="0"/>
<RELWET max="95" min="90"/>
<HEAT min="-6" max="-4"/>
</FORECAST>

<FORECAST day="5" month="11" year="2009" hour="12" tod="2" predict="18" weekday="5">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="758" min="756"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="2" max="5" direction="0"/>
<RELWET max="81" min="76"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="5" month="11" year="2009" hour="18" tod="3" predict="24" weekday="5">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="759" min="757"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="2" max="5" direction="0"/>
<RELWET max="80" min="75"/>
<HEAT min="-3" max="-1"/>
</FORECAST>

<FORECAST day="6" month="11" year="2009" hour="0" tod="0" predict="30" weekday="6">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="760" min="758"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="2" max="5" direction="0"/>
<RELWET max="90" min="85"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="6" month="11" year="2009" hour="6" tod="1" predict="36" weekday="6">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="762" min="760"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="2" max="5" direction="0"/>
<RELWET max="88" min="83"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="6" month="11" year="2009" hour="12" tod="2" predict="42" weekday="6">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="763" min="761"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="3" max="6" direction="0"/>
<RELWET max="73" min="68"/>
<HEAT min="-3" max="-1"/>
</FORECAST>

<FORECAST day="6" month="11" year="2009" hour="18" tod="3" predict="48" weekday="6">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="763" min="761"/>
<TEMPERATURE max="0" min="-2"/>
<WIND min="3" max="6" direction="0"/>
<RELWET max="74" min="69"/>
<HEAT min="-2" max="0"/>
</FORECAST>

<FORECAST day="7" month="11" year="2009" hour="0" tod="0" predict="54" weekday="7">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="765" min="763"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="2" max="5" direction="1"/>
<RELWET max="87" min="82"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="7" month="11" year="2009" hour="6" tod="1" predict="60" weekday="7">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="764"/>
<TEMPERATURE max="-3" min="-5"/>
<WIND min="2" max="5" direction="1"/>
<RELWET max="89" min="84"/>
<HEAT min="-5" max="-3"/>
</FORECAST>

<FORECAST day="7" month="11" year="2009" hour="12" tod="2" predict="66" weekday="7">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="764"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="2" max="5" direction="2"/>
<RELWET max="73" min="68"/>
<HEAT min="-3" max="-1"/>
</FORECAST>

<FORECAST day="7" month="11" year="2009" hour="18" tod="3" predict="72" weekday="7">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="764"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="2" max="5" direction="2"/>
<RELWET max="75" min="70"/>
<HEAT min="-4" max="-2"/>
</FORECAST>


<FORECAST day="8" month="11" year="2009" hour="0" tod="0" predict="78" weekday="1">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="768" min="766"/>
<TEMPERATURE max="-3" min="-5"/>
<WIND min="2" max="5" direction="3"/>
<RELWET max="78" min="73"/>
<HEAT min="-5" max="-3"/>
</FORECAST>

<FORECAST day="8" month="11" year="2009" hour="6" tod="1" predict="84" weekday="1">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="769" min="767"/>
<TEMPERATURE max="-4" min="-6"/>
<WIND min="3" max="6" direction="3"/>
<RELWET max="80" min="75"/>
<HEAT min="-6" max="-4"/>
</FORECAST>

<FORECAST day="8" month="11" year="2009" hour="12" tod="2" predict="90" weekday="1">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="771" min="769"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="3" max="6" direction="4"/>
<RELWET max="66" min="61"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="8" month="11" year="2009" hour="18" tod="3" predict="96" weekday="1">
<PHENOMENA cloudiness="2" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="771" min="769"/>
<TEMPERATURE max="-2" min="-4"/>
<WIND min="3" max="6" direction="3"/>
<RELWET max="62" min="57"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="9" month="11" year="2009" hour="0" tod="0" predict="102" weekday="2">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="771" min="769"/>
<TEMPERATURE max="-3" min="-5"/>
<WIND min="3" max="6" direction="4"/>
<RELWET max="66" min="61"/>
<HEAT min="-5" max="-3"/>
</FORECAST>

<FORECAST day="9" month="11" year="2009" hour="6" tod="1" predict="108" weekday="2">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="772" min="770"/>
<TEMPERATURE max="-4" min="-6"/>
<WIND min="3" max="6" direction="4"/>
<RELWET max="61" min="56"/>
<HEAT min="-7" max="-5"/>
</FORECAST>

<FORECAST day="9" month="11" year="2009" hour="12" tod="2" predict="114" weekday="2">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="771" min="769"/>
<TEMPERATURE max="-3" min="-5"/>
<WIND min="3" max="6" direction="4"/>
<RELWET max="54" min="49"/>
<HEAT min="-6" max="-4"/>
</FORECAST>

<FORECAST day="9" month="11" year="2009" hour="18" tod="3" predict="120" weekday="2">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="769" min="767"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="3" max="6" direction="4"/>
<RELWET max="47" min="42"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

<FORECAST day="10" month="11" year="2009" hour="0" tod="0" predict="126" weekday="3">
<PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="767" min="765"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="5" max="9" direction="5"/>
<RELWET max="58" min="53"/>
<HEAT min="-7" max="-5"/>
</FORECAST>

<FORECAST day="10" month="11" year="2009" hour="6" tod="1" predict="132" weekday="3">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="766" min="764"/>
<TEMPERATURE max="-1" min="-3"/>
<WIND min="3" max="6" direction="5"/>
<RELWET max="71" min="66"/>
<HEAT min="-4" max="-2"/>
</FORECAST>

</TOWN>
</REPORT>
</MMWEATHER>


На выходе нужно получить:
Код

<table width="100%" border="1">
  <tr> 
    <th>&nbsp;</th>
    <th>5</th>
    <th>6</th>
    <th>7</th>
    <th>8</th>
    <th>9</th>
    <th>10</th>
  </tr>
  <tr> 
    <td>0</td>
    <td>-</td>
    <td>-2... -4</td>
    <td>-2... -4</td>
    <td>-3... -5</td>
    <td>-3... -5</td>
    <td>-1... -3</td>
  </tr>
  <tr> 
    <td>1</td>
    <td>-4... -6</td>
    <td>-2... -4</td>
    <td>-3... -5</td>
    <td>-4... -6</td>
    <td>-4... -6</td>
    <td>-1... -3</td>
  </tr>
  <tr> 
    <td>2</td>
    <td>-2... -4</td>
    <td>-1... -3</td>
    <td>-1... -3</td>
    <td>-2... -4</td>
    <td>-3... -5</td>
    <td>-</td>
  </tr>
  <tr> 
    <td>3</td>
    <td>-1... -3</td>
    <td>0... -2</td>
    <td>-2... -4</td>
    <td>-2... -4</td>
    <td>-1... -3</td>
    <td>-</td>
  </tr>
</table>


Т.е. группировка по уникальным дням и прогноз по времени дня построчно.

Сделал так:
Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:key name="groupDay" match="FORECAST" use="@day" />
<xsl:key name="groupTod" match="FORECAST" use="@tod" />
<xsl:template match="TOWN">
   <table border="1">
      <tr>
         <th>Label</th>
         <xsl:apply-templates select="FORECAST[generate-id(.) = generate-id(key('groupDay', @day))]" mode="header" /> 
      </tr>
      
      <xsl:apply-templates select="FORECAST[generate-id(.) = generate-id(key('groupTod', @tod))]" >
         <xsl:sort select="@tod" order="ascending" />
      </xsl:apply-templates>
   </table>
</xsl:template>

<xsl:template match="FORECAST" mode="header">
   <th>
      <xsl:value-of select="@day" />
   </th>
</xsl:template>

<xsl:template match="FORECAST">
   <tr>
      <th><xsl:value-of select="@tod" /></th>
      <xsl:for-each select="key('groupTod', @tod)">
         <td>
            <xsl:value-of select="TEMPERATURE/@min" />...<xsl:value-of select="TEMPERATURE/@max" />
         </td>
      </xsl:for-each>
   </tr>
</xsl:template>
</xsl:stylesheet>


Все ок.

Осталась одна проблема.

Если отсутствуют ноды (FORECAST) с @tod = 0 или 1 или 2 или 3, то выводить пустую ячейку.

Как поступить в этом случае?

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

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

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

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

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


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

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


 




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


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

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