我有一个类似以下的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循环的模板匹配。但如果这只能通过循环解决,那也没问题。
答案 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>