我想显示一组数据 以轮回形式
从查询中检索的数据采用此格式
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
答案 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>