вопрос по заполнению таблицы не известной размерности

MoonCat

Старожил PHPCluba
вопрос по заполнению таблицы не известной размерности

задача примерно такая :
есть XML в котором описывается размещение нек. данных в ячейки таблицы. Количество колонок в таблице заранее не известно но оно задается в виде атрибута . в описании строчек таблицы возможны пропуски элементов ... вот как то так это выглядит :
<tab colums="3">
<col numb="1">
<element colum="1">бла-бла 1</element>
<element colum="2">бла-бла 2</element>
<element colum="3">бла-бла 3</element>
</col>
<col numb="2">
<element colum="1">кря-кря 1</element>
<element colum="2">кря-кря 2</element>
</col>
<col numb="3">
<element colum="2">мля-мля 2</element>
<element colum="3">мля-мля 3</element>
</col>
</tab>

нужно как то XSL написать что бы это все помещалось в
обычную html таблицу ... пустые ячейки ну пусть чем нить
заполняются типа nbsp;

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

Спасибо на всякие полезные мысли и идеи :)
 

chameleon

Новичок
я бы так сделал:
PHP:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="Windows-1251"/>
<xsl:variable name="cols" select="/tab/@colums"/>
	<xsl:template match="/">
		<table border="1">
		<thead>
			<xsl:apply-templates select="/tab/col" mode="head"/>
		</thead>
			<xsl:apply-templates/>
		</table>
	</xsl:template>
	<xsl:template match="col" mode="head">
		<td><xsl:value-of select="@numb"/></td>
	</xsl:template>
	<xsl:template match="col">
	<tr>
		<xsl:call-template name="row">
			<xsl:with-param name="pos" select="1"/>
		</xsl:call-template>
	</tr>
	</xsl:template>

	<xsl:template name="row">
		<xsl:param name="pos"/>
		<td>
			<xsl:choose>
				<xsl:when test="./element[@colum=$pos]">
					<xsl:value-of select="./element[@colum=$pos]"/>
				</xsl:when>
				<xsl:otherwise>&#xA;</xsl:otherwise>
			</xsl:choose>
		</td>
		<xsl:if test="$pos &lt; $cols">
			<xsl:call-template name="row">
				<xsl:with-param name="pos" select="$pos+1"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>
</xsl:stylesheet>
а вот, например, Sababa использовал бы <xsl:key> какой-нибудь ;)..
 

MoonCat

Старожил PHPCluba
спасибо :)
появилась информация к размышлению . но по ходу задача уже немного изменилась , теперь в каждом элементе его позиция задается типа x="1" y="2" типа первый элемент во второй строке ... а тэгов строк больше не будет.
Кажется я теперь это уже сам смогу , если нет то еще спрошу совета :)
 
Сверху