双列表格布局(XSLT)

时间:2013-10-31 03:33:49

标签: xml xslt html-table

考虑以下XML代码:

<tip>
    <number>1</number>
    <number>2</number>
    <number>3</number>
    <number>4</number>
    <number>5</number>
</tip>

我想要这样的HTML输出:

<table>
    <tr>
        <td><number>1</number></td>
        <td><number>2</number></td>
    </tr>
    <tr>
        <td><number>3</number></td>
        <td><number>4</number></td>
    </tr>
    <tr>
        <td><number>5</number></td>
    </tr>
</table>

我是XSL的新手,希望有人可以提供帮助 我有这个。

1 个答案:

答案 0 :(得分:3)

您可以使用mod(模数)执行此操作。

XML输入

<tip>
    <number>1</number>
    <number>2</number>
    <number>3</number>
    <number>4</number>
    <number>5</number>
</tip>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="tip">
        <table>
            <xsl:apply-templates select="number[not(position() mod 2 = 0)]"/>
        </table>
    </xsl:template>

    <xsl:template match="number">
        <tr>
            <td><xsl:value-of select="."/></td>
            <td><xsl:value-of select="(following-sibling::number)[1]"/></td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

<强>输出

<table>
   <tr>
      <td>1</td>
      <td>2</td>
   </tr>
   <tr>
      <td>3</td>
      <td>4</td>
   </tr>
   <tr>
      <td>5</td>
      <td/>
   </tr>
</table>