XSLT组属性的子列表

时间:2014-04-18 10:40:32

标签: xml xslt

我有一个类似以下的XML结构:

<parent>
  <child id="1">Text1</child>
  <child id="1">Text2</child>
  <child id="2">Text3</child>
  <child id="1">Text4</child>
  <child id="1">Text5</child>
</parent>

我想改变元素,所以我有s.th.像

<parent>
  <childrenGroup1>
    <child>Text1</child>
    <child>Text2</child>
  </childrenGroup1>
  <childrenGroup2>
    <child>Text3</child>
  </childrenGroup1>
  <childrenGroup1>
    <child>Text4</child>
    <child>Text5</child>
  </childrenGroup11>
</parent>

这样做的好方法是什么?

我更喜欢for-each循环的模板匹配。但如果这只能通过循环解决,那也没问题。

1 个答案:

答案 0 :(得分:2)

使用XSLT 2.0,它很简单:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="parent">
  <xsl:copy>
    <xsl:for-each-group select="child" group-adjacent="@id">
      <xsl:element name="childrenGroup{current-grouping-key()}">
        <xsl:apply-templates select="current-group()"/>
      </xsl:element>
    </xsl:for-each-group>
  </xsl:copy>
</xsl:template>

<xsl:template match="child/@id"/>

</xsl:stylesheet>