Оновременный вывод в XSL двух смежных значений из XML в таблице

Ekklipce

Новичок
Оновременный вывод в XSL двух смежных значений из XML в таблице

XML:
<data>
<item id="1">test1</item>
<item id="2">test2</item>
<item id="3">test3</item>
<item id="4">test4</item>
<item id="5">test5</item>
<item id="6">test6</item>
</data>

нужно получить :
<table>
<tr>
<td>test1</td><td>test2</td>
<td>test3</td><td>test4</td>
<td>test5</td><td>test6</td>
</tr>
</table>

Над выражением XSL и бьюсь, есть варианты использовать position(), только не знаю как)))...
 

slach

Новичок
<xsl:template match="/data">
<table>
<tr>
<xsl:apply-templates select="item"/>
</tr>
</table>
</xsl:template>

<xsl:template match="item">
<td><xsl:value-of select="."/></td>
</xsl:template>

и че тут биться??
zvon.org то хотя бы читал?
 

Ekklipce

Новичок
Автор оригинала: denver
Кажись он в две колонки хотел, только ступил :)
Именно, в две колонки :))
Шаблон в синхронное отображение узлов <xsl:value-of select="."/> любой ламер напишет ))

-~{}~ 04.09.06 15:05:

появилась мысль по функции position() определять чет и нечет и выстраивать дерево таблицы :
<tr><td></td>
и
<td></td></tr>

способ хоть и рабочий, но малость грязный..

ЗЫ. ну так как сделать красиво всё ?)) Жду ответы
 

Solid

Drosera anglica
Код:
<xsl:template match="item">
<xsl:if test="(position() mod 2)=1">&lt;tr></xsl:if>
<td><xsl:value-of select="."/></td>
<xsl:if test="(position() mod 2)=0 or last()=1">&lt;/tr></xsl:if>
</xsl:template>
Только никак не могу вставить <tr> и </tr> теги.
 

Ekklipce

Новичок
thanks)

только почему &lt;tr> вместо <tr>, что там за фишка с первой кавычкой
 

Solid

Drosera anglica
Ekklipce
Не получается взять <tr> и </tr> в <xsl:text></xsl:text>, по этому решение пока работает на 50% :)
 

Ekklipce

Новичок
class php5 extends php4))))))

ЗЫ. ниче, отправнfя точка есть, добью уже там

thanxx)
 

Solid

Drosera anglica
А, всё работает... просто через js криво проходило...
 

Ekklipce

Новичок
<xsl:if test="(position() mod 2)=1"><tr></xsl:if>
<xsl:if test="(position() mod 2)=0 or last()=1"></tr></xsl:if>
???

у меня заругалось :(
 

Solid

Drosera anglica
Вот так вот правильнее всего...
Код:
<xsl:template match="item">
<xsl:if test="(position() mod 2)=1"><xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text></xsl:if>
<td><xsl:value-of select="."/></td>
<xsl:if test="(position() mod 2)=0 or (position()=last())"><xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text></xsl:if>
</xsl:template>
-~{}~ 04.09.06 16:37:

Возможно ещё будет такая проблема как у меня, так что надо идти сюда: http://www.xefteri.com/forums/index.cfm?page=topic&topicID=42, читать и затем качать: http://aspnet.4guysfromrolla.com/rss/disableOutputEscaping.js
 

Ekklipce

Новичок
Йеесс.. рулит по полной !

-~{}~ 04.09.06 16:40:

нет, у меня парсер ДОМовский на пхп5..
 

denver

?>Скриптер
Автор оригинала: Ekklipce
Йеесс.. рулит по полной !
Попахивает. Т.к. <xsl:text disable-output-escaping="yes"> совсем не для того чтобы теги выводить.
Вот так более грамотно
PHP:
<xsl:template match="item">
  <xsl:if test="(position() mod 2)=1">
    <tr>
      <td><xsl:value-of select="."/></td>
      <td><xsl:value-of select="following::item"/></td>
    </tr>
  </xsl:if>
</xsl:template>
 

Solid

Drosera anglica
denver
Это единственный вариант?
Вроде, ещё можно через рекурсию, да? К примеру, если много одинаковых столбцов?
 

denver

?>Скриптер
Ну, наверное, не единственный :)

Что значит много "одинаковых"?
 

Solid

Drosera anglica
Автор оригинала: denver
Ну, наверное, не единственный :)

Что значит много "одинаковых"?
Тем более пример в FF не работает.
Код:
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>


<xsl:template match="/data">
	<table>
		<xsl:apply-templates select="item"/>
	</table>
</xsl:template>

<xsl:template match="item">
	<xsl:if test="(position() mod 2)=1">
		<tr>
			<td><xsl:value-of select="."/></td>
			<td><xsl:value-of select="following::node()"/></td>
		</tr>
	</xsl:if>
</xsl:template>

</xsl:stylesheet>
 

denver

?>Скриптер
Ах да. My fault. Вместо following::node() надо following::item

PS. и помещай таблицу в <html></html>
 

Solid

Drosera anglica
denver
Не, на этом мои нервы кончились и я заказал книгу по XSLT! :D
 

Solid

Drosera anglica
[offtop]
Старую, но дешовую... единственное не нравится, что издательство Питер. Многие книги этого издательства, которые попадались мне в руки редчайший ... (слишком расписанно), хотя бывали и нормальные.
http://www.ozon.ru/context/detail/id/1298917/ - XSLT. Библиотека программиста.
Думаю толка будет больше, чем от тупого созерцания reference и tutorial'ов на zvon.org...
Было бы денег побольше заказал бы "XML. Энциклопедия". А так, прийдёться довольствоваться тем, что есть... ой, будет.
[/offtop]
 
Сверху