如果您希望使用a元素作为组的第一个元素将元素“分组”为“项目”,一种方法是使用xsl:key按最前面的a元素对元素进行分组
<xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" />
然后你可以简单地匹配a元素,并复制所有在 key 中查找的元素
<xsl:copy-of select="key('items', generate-id())" />
这是完整的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" />
<xsl:template match="/root">
<root>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="a" />
</root>
</xsl:template>
<xsl:template match="a">
<item>
<xsl:copy-of select="." />
<xsl:copy-of select="key('items', generate-id())" />
</item>
</xsl:template>
</xsl:stylesheet>
当应用于您的示例 XML 时,将输出以下内容:
<root>
<item>
<a>a1</a>
<b>b1</b>
<c>c1</c>
<a>a2</a>
</item>
<item>
<a>a2</a>
<b>b2</b>
<c>c2</c>
</item>
</root>