这是一个选项:
XML 输入(更正为格式正确)
<root>
<node>a</node>
<node>b</node>
<node>c</node>
<top1/>
<node>d</node>
<node>e</node>
<top2/>
</root>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="@*|*[starts-with(name(),'top')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(),'top')]">
<xsl:copy>
<xsl:apply-templates select="@*|preceding-sibling::node[(following-sibling::*[starts-with(name(),'top')])[1][generate-id() = generate-id(current())]]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<root>
<top1>
<node>a</node>
<node>b</node>
<node>c</node>
</top1>
<top2>
<node>d</node>
<node>e</node>
</top2>
</root>