如何按一些内部属性的值对记录进行分组/排序?

时间:2014-05-05 14:02:35

标签: list xslt grouping

我想知道是否有方法(实际上我试图找到自己,但根本没有成功)如何根据某些组特征重新排序记录的XML报告。假设我的日志文件包含

形式的记录
<?xml version="1.0"?>
<log>
  <record id="12345">
    <author>me</author>
    <ts>2014-05-02T13:03:50.528995Z</ts>
    <data>arbitrary data</data>
  </record>
  <record id="23456">
    <author>someone else</author>
    <ts>2014-05-05T08:24:32.123495Z</ts>
    <data>another arbitrary data</data>
  </record>
  …
</log>

我想要的是按作者在报告中对记录进行分组:作者姓名和以下特定记录的有序列表。我事先并不知道作者是谁,所以我需要动态创建他们的名字列表。

XSLT能否解决这个问题?

1 个答案:

答案 0 :(得分:1)

好的,所以在仔细阅读了Jeni Tennison's教程后,我已经弄明白了。

<xsl:stylesheet version="1.0">

  <xsl:key name="key-authors" match="record" use="author" />

  <xsl:template match="log">

    <xsl:for-each select="record[generate-id() = generate-id(key('kAuthors',author)[1])]">
      <xsl:sort select="./author" />
      <xsl:value-of select="./author" />

      <xsl:for-each select="key('kAuthors',./author)">
        <xsl:apply-templates select="."/>
      </xsl:for-each>

    </xsl:for-each>

  </xsl:template>

  <xsl:template match="record">
    <!-- do whatever with the record values: @id, author, ts, data -->
  </xsl:template>

</xsl:stylesheet>

谢谢,michael.hor257k。