在xslt格式化

时间:2010-11-30 13:48:30

标签: xslt

我想显示一组数据 以轮回形式

从查询中检索的数据采用此格式

AccID                Month                Year       FTE

1                     Jan                  2009       10
1                     Feb                  2009      20
2                     Jan                  2010      30               

我想将其显示为

AccID  Jan 2009  Feb 2009  Jan 2010       
1        10        20        
2                            30              

1 个答案:

答案 0 :(得分:1)

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="kItemByDate" match="item" use="concat(Month,Year)"/>
    <xsl:key name="kItemByAccID" match="item" use="AccID"/>
    <xsl:variable name="vDates" 
         select="/root/item[count(.|key('kItemByDate',
                                        concat(Month,Year))[1])=1]"/>
    <xsl:template match="text()"/>
    <xsl:template match="/">
        <table>
            <tr>
                <th>AccID</th>
                <xsl:for-each select="$vDates">
                    <th>
                        <xsl:value-of select="concat(Month,' ',Year)"/>
                    </th>
                </xsl:for-each>
            </tr>
            <xsl:apply-templates/>
        </table>
    </xsl:template>
    <xsl:template match="item[count(.|key('kItemByAccID',AccID)[1])=1]">
        <xsl:variable name="vItems" select="key('kItemByAccID',AccID)"/>
        <tr>
            <td>
                <xsl:value-of select="AccID"/>
            </td>
            <xsl:for-each select="$vDates">
                <td>
                    <xsl:value-of select="$vItems[Month=current()/Month]
                                                 [Year=current()/Year]
                                                 /FTE"/>
                </td>
            </xsl:for-each>
        </tr>
    </xsl:template>
</xsl:stylesheet>

使用此输入:

<root>
    <item>
        <AccID>1</AccID>
        <Month>Jan</Month>
        <Year>2009</Year>
        <FTE>10</FTE>
    </item>
    <item>
        <AccID>1</AccID>
        <Month>Feb</Month>
        <Year>2009</Year>
        <FTE>20</FTE>
    </item>
    <item>
        <AccID>2</AccID>
        <Month>Jan</Month>
        <Year>2010</Year>
        <FTE>30</FTE>
    </item>
</root>

输出:

<table>
    <tr>
        <th>AccID</th>
        <th>Jan 2009</th>
        <th>Feb 2009</th>
        <th>Jan 2010</th>
    </tr>
    <tr>
        <td>1</td>
        <td>10</td>
        <td>20</td>
        <td></td>
    </tr>
    <tr>
        <td>2</td>
        <td></td>
        <td></td>
        <td>30</td>
    </tr>
</table>