Похоже на простую задачу группировки, которую можно решить в XSLT 2 или 3 с помощью xsl:for-each-group
:
<xsl:template match="root">
<xsl:copy>
<xsl:for-each-group select="a" group-by="substring-before(@name, '_')">
<b name="{current-grouping-key()}">
<xsl:copy-of select="current-group()/*"/>
</b>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
Предполагается, что root
является общим элементом контейнера для элементов a
, которые нужно сгруппировать,адаптируйте это по мере необходимости.