Привет всем.
Есть такая проблема. Нужно XML такого вида
<items>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
</items>
средствами XSLT привести к следующему результату:
<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 столбца.
Посоветуйте что-нибудь, пожалуйста...
Примерно так:
<table>
<tr>
<xsl:for-each select="/items/item">
<td><xsl:value-of select="."/></td>
<xsl:if test="(position() mod 3) = 0">
<xsl:value-of disable-output-escaping="yes" select="string('</tr><tr>')"/>
</xsl:if>
</xsl:for-each>
</tr>
</table>
Здравствуйте, kilerbee, Вы писали:
K>Привет всем.
K>Есть такая проблема. Нужно XML такого вида
K><items>
K><item>1</item>
K><item>2</item>
K><item>3</item>
K><item>4</item>
K><item>5</item>
K><item>6</item>
K></items>
K>средствами XSLT привести к следующему результату:
K><table>
K><tr><td>1</td><td>2</td></tr>
K><tr><td>3</td><td>4</td></tr>
K><tr><td>5</td><td>6</td></tr>
K></table>
K>то есть, разбить данные на 2 столбца.
K>Посоветуйте что-нибудь, пожалуйста...---------------------------
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, alex_at_net, Вы писали:
Спасибо, я как раз нащупал, как это сделать, а Вы дополнили недостающее
__>Примерно так:
__>__><table>
__><tr>
__><xsl:for-each select="/items/item">
__><td><xsl:value-of select="."/></td>
__><xsl:if test="(position() mod 3) = 0">
__><xsl:value-of disable-output-escaping="yes" select="string('</tr><tr>')"/>
__></xsl:if>
__></xsl:for-each>
__></tr>
__></table>
__>
...
Здравствуйте, alex_at_net, Вы писали:
Маленькое исправление
<xsl:if test="(position()-1 mod 2) = 0">
__>Примерно так:
__>__><table>
__><tr>
__><xsl:for-each select="/items/item">
__><td><xsl:value-of select="."/></td>
__><xsl:if test="(position() mod 3) = 0">
__><xsl:value-of disable-output-escaping="yes" select="string('</tr><tr>')"/>
__></xsl:if>
__></xsl:for-each>
__></tr>
__></table>
__>
Здравствуйте, kilerbee, Вы писали:
K>Здравствуйте, alex_at_net, Вы писали:
K>Маленькое исправление
K><xsl:if test="(position()-1 mod 2) = 0">
__>>Примерно так:
__>>__>><table>
__>><tr>
__>><xsl:for-each select="/items/item">
__>><td><xsl:value-of select="."/></td>
__>><xsl:if test="(position() mod 3) = 0">
__>><xsl:value-of disable-output-escaping="yes" select="string('</tr><tr>')"/>
__>></xsl:if>
__>></xsl:for-each>
__>></tr>
__>></table>
__>>
А если элементов нечетное количество? — тогда таблица невалидная получится
Извините что вмешиваюсь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, kilerbee, Вы писали:
K>то есть, разбить данные на 2 столбца.
K>Посоветуйте что-нибудь, пожалуйста...
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="items">
<table border="1"><xsl:apply-templates /></table>
</xsl:template>
<xsl:template match="item" />
<xsl:template match="item[position() mod 2 = 1]">
<tr><td><xsl:value-of select="." /></td><td><xsl:value-of select="following-sibling::item[1]" /></td></tr>
</xsl:template>
</xsl:stylesheet>
... << RSDN@Home 1.1.4 stable rev. 510>>