XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.03.03 05:19
Оценка:
Первый раз пишу xsl надо преобразовать XML-файл в html-таблицу:

          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>


проблема в том, что цвет шрифта надо указывать внутри <td></td> каждой из 3-х колонок, т.к. в таком виде

<font color="#17475e">
<td><!-- что-то там --></td> <td><!-- что-то там --></td> <td><!-- что-то там --></td>
</font>

он вообще не влияет на цвет текста. Можно просто сделать это одинаково, три раза:

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <!--первая колонка -->
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0"> 
    <xsl:choose>
      <!--в зависимости от уровня меняем цвет-->
      <xsl:when test="@level=0">
        <font color="#666666">
          <xsl:call-template name="write_sender"/>
        </font>
      </xsl:when>
      <xsl:when test="@level=1">
        <font color="#17475e">
          <xsl:call-template name="write_sender"/>
        </font>
      </xsl:when>
    </xsl:choose>
    </td> 
    <!--вторая колонка -->
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0"> 
    <xsl:choose>
      <!--в зависимости от уровня меняем цвет-->
      <xsl:when test="@level=0">
        <font color="#666666">
          <xsl:call-template name="write_time"/>
        </font>
      </xsl:when>
      <xsl:when test="@level=1">
        <font color="#17475e">
          <xsl:call-template name="write_time"/>
        </font>
      </xsl:when>
    </td> 
    <!--третья колонка -->
    <td width="98%" align="left"> 
    <xsl:choose>
      <!--в зависимости от уровня меняем цвет-->
      <xsl:when test="@level=0">
        <font color="#666666">
          <xsl:call-template name="write_msg"/>
        </font>
      </xsl:when>
      <xsl:when test="@level=1">
        <font color="#17475e">
          <xsl:call-template name="write_msg"/>
        </font>
      </xsl:when>
    </xsl:choose>
    </td>
    </tr>
  </xsl:template>


как бы это безобразие переделать, чтоб <xsl:choose></xsl:choose> было только в одном экземпляре?
Re: XSL
От: vvaizh http://izh-test.sourceforge.net/
Дата: 10.03.03 05:31
Оценка: 7 (1)
Здравствуйте, Odi$$ey, Вы писали:

OE>Первый раз пишу xsl надо преобразовать XML-файл в html-таблицу:


OE>как бы это безобразие переделать, чтоб <xsl:choose></xsl:choose> было только в одном экземпляре?


1. call_template вобще плохой стиль.. почему не apply_template?
2. по крайней мере match можно задавать с маской!

в общем я бы наверно сделал что то вроде такого:


  <xsl:template match="write_sender|write_time|write_msg" mode="colored">
    <xsl:choose>
      <xsl:when test="../@level=0">
        <font color="#666666">
          <xsl:apply-template select="."/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=1">
        <font color="#17475e">
          <xsl:apply-template select=".""/>
        </font>
      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <!--первая колонка -->
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <xsl:apply-template select="write_sender" mode="colored"/>
    </td> 
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0"> 
      <xsl:apply-template select="write_time" mode="colored"/>
    </td> 
    <td width="98%" align="left"> 
      <xsl:apply-template select="write_msg" mode="colored"/>
    </td>
    </tr>
  </xsl:template>


P.S. BTW у вас один choose не закрыт!
http://izh-test.sourceforge.net/russian/introduction.html
Re[2]: Re[2]: XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.03.03 07:32
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>1. call_template вобще плохой стиль.. почему не apply_template?


потому что первый раз

V>2. по крайней мере match можно задавать с маской!


V>в общем я бы наверно сделал что то вроде такого:


V>
V>  <xsl:template match="write_sender|write_time|write_msg" mode="colored">
V>    <xsl:choose>
V>      <xsl:when test="../@level=0">
V>        <font color="#666666">
V>          <xsl:apply-template select="."/>
V>        </font>
V>      </xsl:when>
V>      <xsl:when test="../@level=1">
V>        <font color="#17475e">
V>          <xsl:apply-template select=".""/>
V>        </font>
V>      </xsl:when>
V>    </xsl:choose>
V>  </xsl:template>
V>


"Не удается отобразить страницу XML"
"Не допускается использование здесь ключевого слова xsl:apply-template. "


V>P.S. BTW у вас один choose не закрыт!


выпал при копировании
Re[3]: Re[2]: XSL
От: vvaizh http://izh-test.sourceforge.net/
Дата: 10.03.03 10:46
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

V>>
V>>  <xsl:template match="write_sender|write_time|write_msg" mode="colored">
V>>    <xsl:choose>
V>>      <xsl:when test="../@level=0">
V>>        <font color="#666666">
V>>          <xsl:apply-template select="."/>
V>>        </font>
V>>      </xsl:when>
V>>      <xsl:when test="../@level=1">
V>>        <font color="#17475e">
V>>          <xsl:apply-template select=".""/>
V>>        </font>
V>>      </xsl:when>
V>>    </xsl:choose>
V>>  </xsl:template>
V>>


OE>

OE>"Не удается отобразить страницу XML"
OE>"Не допускается использование здесь ключевого слова xsl:apply-template. "


Sorry..
конечно там должно быть apply-templates..

читайте http://www.rol.ru/news/it/helpdesk/xslt01.htm
и юзайте http://www.topxml.com/xselerator/download.asp
http://izh-test.sourceforge.net/russian/introduction.html
Re[2]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 09:06
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>1. call_template вобще плохой стиль..


Почему?
Re[3]: XSL
От: vvaizh http://izh-test.sourceforge.net/
Дата: 11.03.03 10:37
Оценка:
Здравствуйте, mikkri, Вы писали:

M>Здравствуйте, vvaizh, Вы писали:


V>>1. call_template вобще плохой стиль..


M>Почему?


Когда говорят "плохой" стиль, это значит других аргументов нет..
Так говорят "опытные пацаны" которых я знаю..
В общем может причины и есть, но я их сейчас красиво сформулировать не смогу..
Так что сугубое ИМХО, как и само понятие "стиль"..
http://izh-test.sourceforge.net/russian/introduction.html
Re[4]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 10:51
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Здравствуйте, mikkri, Вы писали:


M>>Здравствуйте, vvaizh, Вы писали:


V>>>1. call_template вобще плохой стиль..


M>>Почему?


V>Когда говорят "плохой" стиль, это значит других аргументов нет..

V>Так говорят "опытные пацаны" которых я знаю..
V>В общем может причины и есть, но я их сейчас красиво сформулировать не смогу..
V>Так что сугубое ИМХО, как и само понятие "стиль"..

Спрашиваю из-за того, что я пытался пользоваться обоими способавми для написания шаблонов.

Так вот, если структуру документа ты знаешь заранее, то, как мне показалось, намного удобнее использовать call-template из-за полной уверенности в составе применяемых шаблонов и последовательности их применения.
Более того, если один и тот же тег в разных контекстах нужно по разному интерпретировать, то apply-templates затруднительно использовать.

Хотя, в случае документа с хаотичной структурой и неперегруженным семантикой составом тегов apply-templates применять конечно же легче/лучше.

Согласен?
Re[4]: XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.03.03 13:21
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Sorry..

V>конечно там должно быть apply-templates..

однако не получается, таблица создается правильно, но пустая

вот тестовый XML:

<?xml version="1.0" encoding="WINDOWS-1251" ?>
<?xml-stylesheet type="text/xsl" href="cclog.xsl"?>
<CCLOG>
    <REC time="07-03-2003 09:52:07" level="0" sender="-1">Сообщение 1</REC>
    <REC time="07-03-2003 09:52:07" level="1" sender="1">Сообщение 2</REC>
    <REC time="07-03-2003 09:52:07" level="2" sender="10">Сообщение 3</REC>
    <REC time="07-03-2003 09:52:07" level="3" sender="12">Сообщение 4</REC>
    <REC time="07-03-2003 09:52:08" level="4" sender="14">Сообщение 5</REC>
</CCLOG>


из вашего ответа получился такой xsl:

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

  <xsl:template match="CCLOG">
    <html>
      <head>
        <title>Протокол</title>
      </head>
      <body bgcolor="#FFFFFF" text="#71B3D7">
        <font face="Tahoma">
        <h3 align="center">Протокол</h3>
          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>
        </font>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <!--в зависимости от уровня меняем цвет-->
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <!--первая колонка - sender-->
      <xsl:apply-templates select="write_sender" mode="colored"/>
    </td> 
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0"> 
      <!--вторая колонка  - time-->
      <xsl:apply-templates select="write_time" mode="colored"/>
    </td> 
    <td width="98%" align="left"> 
      <!--третья колонка - msg-->
      <xsl:apply-templates select="write_msg" mode="colored"/>
    </td>
    </tr>
  </xsl:template>

  <xsl:template match="write_sender|write_time|write_msg" mode="colored">
    <xsl:choose>
      <xsl:when test="../@level=0">
        <!-- отладочные -->
        <font color="#666666">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=1">
        <!-- информационные -->
        <font color="#17475e">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=2">
        <!-- внимание -->
        <font color="#0000ff">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=3">
        <!-- очень важные -->
        <font color="#BB00BB">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=4">
        <!-- авария -->
        <font color="#FF0000">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:when>
      <xsl:otherwise>
        <!-- неизвестно что -->
        <font color="#000000">
          <xsl:apply-templates select="."/>
        </font>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>


почему пустые первые две колонки понятно, мои шаблоны были такие

  <xsl:template name="write_time">
        <i><xsl:value-of select="@time"/></i> 
  </xsl:template>

  <xsl:template name="write_sender">
       <xsl:value-of select="@sender"/>
  </xsl:template>

  <xsl:template name="write_msg">
         <xsl:value-of select="."/>
  </xsl:template>


третья вроде должна заполнятся, однако ж нет


>и юзайте http://www.topxml.com/xselerator/download.asp


кто это кстати, я не понял из описания
Re[5]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 13:41
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

Не подскажете, зачем вам такая строчка:
<xsl:apply-templates select="write_sender" mode="colored"/>


Ведь узла с тегом write_sender НЕТ!

А другого смысла у select вроде как тоже нет:
select
Can be used to process nodes selected by an expression, instead of processing all children. The value of the select attribute is an expression, which must evaluate to a node-set. The selected node-set is processed in document order, unless a different sort order has been specified.
Re[5]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 13:50
Оценка:
Еще одна проблема. У тебя второй и третий шаблоны зацикливаются (т.е. если бы во втором шаблоне apply-templates срабатывал, то ты получал бы зацикливание).
Re[5]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 13:54
Оценка:
Здравствуйте, Odi$$ey, Вы писали:


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

  <xsl:template match="CCLOG">
    <html>
      <head>
        <title>Протокол</title>
      </head>
      <body bgcolor="#FFFFFF" text="#71B3D7">
        <font face="Tahoma">
        <h3 align="center">Протокол</h3>
          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>
        </font>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <!--в зависимости от уровня меняем цвет-->
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <!--первая колонка - sender-->
      <xsl:call-template name="value-cell"/>
    </td> 
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0"> 
      <!--вторая колонка  - time-->
      <xsl:call-template name="value-cell"/>
    </td> 
    <td width="98%" align="left"> 
      <!--третья колонка - msg-->
      <xsl:call-template name="value-cell"/>
    </td>
    </tr>
  </xsl:template>

  <xsl:template name="value-cell">
    <xsl:choose>
      <xsl:when test="../@level=0">
        <!-- отладочные -->
        <font color="#666666">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=1">
        <!-- информационные -->
        <font color="#17475e">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=2">
        <!-- внимание -->
        <font color="#0000ff">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=3">
        <!-- очень важные -->
        <font color="#BB00BB">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:when>
      <xsl:when test="../@level=4">
        <!-- авария -->
        <font color="#FF0000">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:when>
      <xsl:otherwise>
        <!-- неизвестно что -->
        <font color="#000000">
          <xsl:apply-templates select="." mode="value"/>
        </font>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="REC" mode="value">    
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>


Если я правильно уловил твою мысль, тебе поможет что-нибудь навроде этого скрипта.
Re[5]: XSL
От: vvaizh http://izh-test.sourceforge.net/
Дата: 11.03.03 14:01
Оценка: 3 (1)
Здравствуйте, Odi$$ey, Вы писали:

К сожалению, я не понял сначала структуру XML..
Но я бы делал так:


<?xml version="1.0" encoding="WINDOWS-1251" ?>
<?xml-stylesheet type="text/xsl" href="cclog.xsl"?>
<CCLOG>
    <REC level="0"><time>07-03-2003 09:52:07</time><sender>-1</sender>Сообщение 1</REC>
    <REC level="1"><time>07-03-2003 09:52:07</time><sender>1</sender>Сообщение 2</REC>
    <REC level="2"><time>07-03-2003 09:52:07</time><sender>10</sender>Сообщение 3</REC>
    <REC level="3"><time>07-03-2003 09:52:07</time><sender>12</sender>Сообщение 4</REC>
    <REC level="4"><time>07-03-2003 09:52:08</time><sender>14</sender>Сообщение 5</REC>
</CCLOG>


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

  <xsl:template match="CCLOG">
    <html>
      <head>
        <title>Протокол</title>
      </head>
      <body bgcolor="#FFFFFF" text="#71B3D7">
        <font face="Tahoma">
        <h3 align="center">Протокол</h3>
          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>
        </font>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <xsl:apply-templates select="sender" mode="colored"/>
    </td>
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0">
      <xsl:apply-templates select="time" mode="colored"/>
    </td>
    <td width="98%" align="left">
      <xsl:apply-templates select="." mode="colored"/>
    </td>
    </tr>
  </xsl:template>
  
  <xsl:template match="time|sender|REC" mode="colored">
    <font>
      <xsl:attribute name="color">
        <xsl:choose>
           <xsl:when test="../@level=0">#666666</xsl:when>
           <xsl:when test="../@level=0">#17475e</xsl:when>
           <xsl:when test="../@level=0">#0000ff</xsl:when>
           <xsl:when test="../@level=0">#BB00BB</xsl:when>
           <xsl:when test="../@level=0">#FF0000</xsl:when>
           <xsl:when test="../@level=0">#000000</xsl:when>
        </xsl:choose>
      </xsl:attribute>
      <xsl:value-of select="text()"/>
    </font>
  </xsl:template>

</xsl:stylesheet>


BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним..
Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level..

Хотя, может кто то подскажет вам выход и для вашей структуры XML..

>>и юзайте http://www.topxml.com/xselerator/download.asp

OE>кто это кстати, я не понял из описания

Это лучшее средства из тех что я знаю (и самое лёгкое) для написания/отладки XML/XSL
в правой части окна — xml, в левой — xsl, по f5 — результат, как то можно
пошагово отлаживать (я правда не пользуюсь)
представление текст/html/дерево тэгов, умная подсветка, умный autocomplete, wizard удобный..
Возможность смотреть результаты разных XSLT-процесоров..
В общем без него как без рук..
http://izh-test.sourceforge.net/russian/introduction.html
Re[6]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 14:59
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним..

V>Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level..
V>
V>Хотя, может кто то подскажет вам выход и для вашей структуры XML..

Можно делать все так же, только использовать в селектах выбор атрибута.
<?xml version="1.0" encoding="WINDOWS-1251" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" indent="yes"/>

  <xsl:template match="CCLOG">
    <html>
      <head>
        <title>Протокол</title>
      </head>
      <body bgcolor="#FFFFFF" text="#71B3D7">
        <font face="Tahoma">
        <h3 align="center">Протокол</h3>
          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>
        </font>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <xsl:apply-templates select="@sender" mode="colored"/>
    </td>
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0">
      <xsl:apply-templates select="@time" mode="colored"/>
    </td>
    <td width="98%" align="left">
      <xsl:apply-templates select="." mode="colored"/>
    </td>
    </tr>
  </xsl:template>
  
  <xsl:template match="time|sender|REC" mode="colored">
    <font>
      <xsl:attribute name="color">
        <xsl:choose>
           <xsl:when test="../@level=0">#666666</xsl:when>
           <xsl:when test="../@level=0">#17475e</xsl:when>
           <xsl:when test="../@level=0">#0000ff</xsl:when>
           <xsl:when test="../@level=0">#BB00BB</xsl:when>
           <xsl:when test="../@level=0">#FF0000</xsl:when>
           <xsl:when test="../@level=0">#000000</xsl:when>
        </xsl:choose>
      </xsl:attribute>
      <xsl:value-of select="text()"/>
    </font>
  </xsl:template>

</xsl:stylesheet>


P.S. Твой скрипт мне понравился больше моего
А что касается предпочтений между атрибутами и полноценными нодами — то нужно по ситуации разбираться.
Т.е. в некоторых ситуациях атрибуты будут удобнее из-за своей компактности, в некоторых они наоборот будут недостаточны, например, в случае мульти-значений для какой-то величины
Re[7]: XSL
От: vvaizh http://izh-test.sourceforge.net/
Дата: 11.03.03 15:19
Оценка:
Здравствуйте, mikkri, Вы писали:

V>>Хотя, может кто то подскажет вам выход и для вашей структуры XML..

M>Можно делать все так же, только использовать в селектах выбор атрибута.

К сожалению в мой код опять вкралась ошибка
там где в when test нужно было писать:
../@level=0 or @level=0
../@level=1 or @level=1
.....

При этом строчки получаются разноцветными..
Дык вот, если поставить скажем @sender ,
то он опять таки будет одного цвета..
ИМХО это от того, что писать template для аттрибута всё таки нельзя
(ломает доку читать, поэтому если я не прав, скажите так, как сделать разноцветную хрень с аттрибутами..)
http://izh-test.sourceforge.net/russian/introduction.html
Re[8]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 15:57
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>ИМХО это от того, что писать template для аттрибута всё таки нельзя


Хм. Похоже и в правду не работает
Re[9]: XSL
От: mikkri Великобритания  
Дата: 11.03.03 16:21
Оценка: 33 (2)
Здравствуйте, mikkri, Вы писали:

M>Здравствуйте, vvaizh, Вы писали:


V>>ИМХО это от того, что писать template для аттрибута всё таки нельзя


M>Хм. Похоже и в правду не работает


Опять ошибка! Все же можно. Только в match нужно прописывать не названия узлов, а названия атрибутов.

Вот этот код мило все раскрашивает:

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

  <xsl:template match="CCLOG">
    <html>
      <head>
        <title>Протокол</title>
      </head>
      <body bgcolor="#FFFFFF" text="#71B3D7">
        <font face="Tahoma">
        <h3 align="center">Протокол</h3>
          <table width="100%" border="0" cellspacing="2" align="left">
             <xsl:apply-templates select="REC"/>
          </table>
        </font>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="REC">
    <tr bgcolor="#FFFFFF">
    <td width="1%" nowrap="" align="right" bgcolor="#F0F0F0">
      <xsl:apply-templates select="@sender" mode="colored"/>
    </td>
    <td width="1%" nowrap="" align="left" bgcolor="#F0F0F0">
      <xsl:apply-templates select="@time" mode="colored"/>
    </td>
    <td width="98%" align="left">
      <xsl:apply-templates select="." mode="colored"/>
    </td>
    </tr>
  </xsl:template>
  
  <xsl:template match="@sender|@time|REC" mode="colored">
    <font>
      <xsl:attribute name="color">
        <xsl:choose>
           <xsl:when test="(@level=0) or (../@level=0)">#666666</xsl:when>
           <xsl:when test="(@level=1) or (../@level=1)">#17475e</xsl:when>
           <xsl:when test="(@level=2) or (../@level=2)">#0000ff</xsl:when>
           <xsl:when test="(@level=3) or (../@level=3)">#BB00BB</xsl:when>
           <xsl:when test="(@level=4) or (../@level=4)">#FF0000</xsl:when>
           <xsl:when test="(@level=5) or (../@level=5)">#000000</xsl:when>
        </xsl:choose>
      </xsl:attribute>
      VALUE<xsl:value-of select="."/>
    </font>                         
  </xsl:template>

</xsl:stylesheet>
Re[6]: XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 12.03.03 04:47
Оценка:
Здравствуйте, vvaizh, Вы писали:

про

<CCLOG>
    <REC time="07-03-2003 09:52:07" level="0" sender="-1">Сообщение 1</REC>
    <REC time="07-03-2003 09:52:07" level="1" sender="1">Сообщение 2</REC>
    <REC time="07-03-2003 09:52:07" level="2" sender="10">Сообщение 3</REC>
</CCLOG>


и

<CCLOG>
    <REC level="0">
        <time>07-03-2003 09:52:07</time>
        <sender>-1</sender>
        Сообщение 1
    </REC>
    <REC level="1">
        <time>07-03-2003 09:52:07</time>
        <sender>1</sender>
        Сообщение 2
    </REC>
    <REC level="2">
        <time>07-03-2003 09:52:07</time>
        <sender>10</sender>
        Сообщение 3
    </REC>
</CCLOG>


V>BTW, опять же где то слышал, что люди работающие с XML делятся на тех, кто доказывает, что наилучший стиль — пихать всё что можно в аттрибуты, и тех, кто считает, что наобород их как можно больше следует избегать.. Я как видите отношусь к последним..

V>Может быть как раз отттого, что мой XSL получился короче.. И вообще я бы например даже msg заключил в отдельный тэг, чтобы не пользоваться text(), а может быть даже и level..

я бы с удовольствием почитал где-то теорию — чего пихать в атрибуты, чего в отдельные тэги. Пока же подхожу к этому делу так — может внутри <CCLOG>
быть несколько REC? Да. Значит делаю тэгом <REC>. Может внутри <REC> быть несколько level, sender или time? Нет. Значит это суть атрибуты одной записи <REC>.
Re[10]: XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 12.03.03 05:00
Оценка:
Здравствуйте, mikkri, Вы писали:

M>Опять ошибка! Все же можно. Только в match нужно прописывать не названия узлов, а названия атрибутов.


M>Вот этот код мило все раскрашивает:


то что доктор прописал пошел разбираться как это работает
Re[7]: XSL
От: mikkri Великобритания  
Дата: 12.03.03 07:30
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>я бы с удовольствием почитал где-то теорию — чего пихать в атрибуты, чего в отдельные тэги. Пока же подхожу к этому делу так — может внутри <CCLOG>

OE>быть несколько REC? Да. Значит делаю тэгом <REC>. Может внутри <REC> быть несколько level, sender или time? Нет. Значит это суть атрибуты одной записи <REC>.

Вот! И я того же мнения придерживаюсь.
Re[6]: XSL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 26.03.03 10:48
Оценка:
Здравствуйте, vvaizh, Вы писали:

>>>и юзайте http://www.topxml.com/xselerator/download.asp

OE>>кто это кстати, я не понял из описания

V>Это лучшее средства из тех что я знаю (и самое лёгкое) для написания/отладки XML/XSL

V>в правой части окна — xml, в левой — xsl, по f5 — результат, как то можно
V>пошагово отлаживать (я правда не пользуюсь)
V>представление текст/html/дерево тэгов, умная подсветка, умный autocomplete, wizard удобный..
V>Возможность смотреть результаты разных XSLT-процесоров..
V>В общем без него как без рук..

Download a FREE 21-day TRIAL
Зажигалка Zippo — огнетушитель UnZippo
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.