2010-06-10 66 views
0

下面是一个XML数据集的摘录:帮助在表中显示XML数据

<instance> 
    <ID>1</ID> 
    <start>5.8633333333</start> 
    <end>29.8216666667</end> 
    <code>Player 1</code> 
</instance> 
<instance> 
    <ID>2</ID> 
    <start>28.4566666667</start> 
    <end>51.1450000000</end> 
    <code>Player 2</code> 
</instance> 
<instance> 
    <ID>3</ID> 
    <start>49.8383333333</start> 
    <end>71.1150000000</end> 
    <code>Player 3</code> 
</instance> 
<instance> 
    <ID>4</ID> 
    <start>72.9850000000</start> 
    <end>95.3766666667</end> 
    <code>Player 1</code> 
</instance> 
<instance> 
    <ID>5</ID> 
    <start>93.9250000000</start> 
    <end>116.6883333333</end> 
    <code>Player 2</code> 
</instance> 

我期待在一个表,其中每一行拥有一个唯一的代码(如在播放器显示该数据1,玩家2等),以及所有与该特定的代码。这样的事情:

<tr><td>Player 1</td><td>ID 1; ID 4</td></tr> 
    <tr><td>Player 2</td><td>ID 2; ID 5</td></tr> 

我一直在试图让这个工作一段时间,但失败。任何帮助将非常感激!

谢谢! 弗兰克

回答

0

我会用这样的:

<xsl:for-each-group select="instance" group-by="code/text()"> 
    <tr> 
    <td><xsl:value-of select="current-grouping-key()" /></td> 
    <td><xsl:apply-templates select="current-group()" /></td> 
    </tr> 
</xsl:for-each-group> 

这组instance元素一起基于代码元素中的文本。 current-grouping-key()函数返回将某些东西分组在一起的字符串,并且current-group()返回该键的节点序列。你仍然需要填写分号以便输入分号,但这不应该太难。

for-each-group是一个XSLT 2.0构造,因此请确保您使用了解它的XSLT处理器。撒克逊是一个很好的例子。