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

List 如何按某些内部属性的值对记录进行分组/排序?,list,xslt,grouping,List,Xslt,Grouping,我想知道是否有办法(实际上我试图找到自己,但根本没有成功)根据一些组特征对记录的XML报告重新排序。假设我有一个日志文件,它由以下形式的记录组成: <?xml version="1.0"?> <log> <record id="12345"> <author>me</author> <ts>2014-05-02T13:03:50.528995Z</ts> <data>arb

我想知道是否有办法(实际上我试图找到自己,但根本没有成功)根据一些组特征对记录的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>

我
2014-05-02T13:03:50.528995Z
任意数据
别人
2014-05-05T08:24:32.123495Z
另一个任意数据
…
我想要的是在报告中按作者对记录进行分组:作者姓名和下面的特定记录的有序列表。我事先不知道作者是谁,所以我需要动态创建他们姓名的列表


XSLT能够解决这个问题吗?

好的,所以在仔细阅读本教程之后,我已经找到了答案

<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。

这是一个常见问题。进行搜索。或者尝试显示的一个“相关”主题。好的,你是对的。我一直在寻找的就是所谓的两阶段穆钦分组。我不明白为什么我以前没有在搜索结果中看到它,但无论如何,还是要谢谢你。如果你只是按作者分组,那么“一阶段”的Muenchian分组就足够了——但是如果你使用XSLT 1.0,Muenchian分组肯定是答案。