xslt: форматирование в 2 столбца

sigurd

Новичок
xslt: форматирование в 2 столбца

Привет всем.

Есть такая проблема. Нужно XML такого вида
PHP:
<items>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</items>
средствами XSLT привести к следующему результату:
PHP:
<table>
<tr><td>1</td><td>2</td></tr>
<tr><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td></tr>
</table>
то есть, разбить данные на 2 столбца.

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

sigurd

Новичок
спасибо, разобрался....
финальный результат:

PHP:
<table>
<tr>
<xsl:for-each select="item">
<xsl:if test="((position()-1) mod 2) = 0">
<xsl:value-of disable-output-escaping="yes" select="string('&lt;/tr&gt;&lt;tr&gt;')"/>
</xsl:if>
		
<td><xsl:value-of select="." /></td>

</xsl:for-each>
</tr>
</table>
 

crocodile2u

http://vbolshov.org.ru
Может быть, лучше что-то вроде такого:
PHP:
<table>
<xsl:for-each select="item[position() mod 2 = 1]">
	<xsl:variable name="next" select="position()*2"/>
	<tr>
		<td><xsl:value-of select="." /></td>
		<td><xsl:value-of select="../item[position()=$next]" /></td>
	</tr>
</xsl:for-each>
</table>
Так, по крайней мере, не нужно всяких select="string('&lt;/tr&gt;&lt;tr&gt;')"
 

sigurd

Новичок
спасибо, тоже работает ;-)

учтем на будущее, как более красивое решение.
 

olpa

Новичок
Может быть, лучше что-то вроде такого:

PHP:
<table>
<xsl:for-each select="item[position() mod 2 = 1]">
    <xsl:variable name="next" select="position()*2"/>
    <tr>
        <td><xsl:value-of select="." /></td>
        <td><xsl:value-of select="../item[position()=$next]" /></td>
    </tr>
</xsl:for-each>
</table>
Я бы ещё улучшил:
PHP:
<table>
<xsl:for-each select="item[position() mod 2 = 1]">
    <tr>
        <td><xsl:value-of select="." /></td>
        <td><xsl:value-of select="following-sibling::item[1]" /></td>
    </tr>
</xsl:for-each>
</table>
 
Сверху