帮助在表格中显示XML数据

时间:2010-06-10 15:18:39

标签: xml xslt

以下是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>

我一直试图让它工作一段时间但却失败了。任何帮助将不胜感激!

谢谢! 弗兰克

1 个答案:

答案 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处理器。撒克逊人就是一个很好的例子。