XSLT - 如何在XSLT 2.0中按公共子元素值对输出进行分组

时间:2014-04-22 12:25:08

标签: xml xslt grouping

我有一个像下面这样的XML文件,我可能有多个记录,它们有一个共同的子元素,如下所示:

<person>
  <name>Alice</name>
  <account>001</account>
</person>
<person>
  <name>Alice</name>
  <account>002</account>
</person>

如何使用XSLT 2.0将其转换为以下内容?

<person>
  <name>Alice</name>
  <account>001,002</account>
</person>

我是XSLT的新手,所以请原谅潜在的新手问题。这里有任何指导意见。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用for-each-groupperson元素进行分组,使用separator attribute on value-of构建逗号分隔值:

<xsl:for-each-group select="person" group-by="name">
  <person>
    <xsl:sequence select="name" /><!-- copy the name element -->
    <account>
      <xsl:value-of select="current-group()/account" separator="," />
    </account>
  </person>
</xsl:for-each-group>

(假设您当前的上下文节点是person元素的父节点 - 如果不是,那么您必须适当调整for-each-group select表达式