以下是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 :(得分: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处理器。撒克逊人就是一个很好的例子。