Есть несколько способов подойти к этому / которые вы выбираете, зависит от ваших точных требований. Приведенный ниже код найдет любой элемент a
и скопирует его, удалив из него все непосредственные дочерние элементы b
, а затем поместит их сразу после оригинала a
.
<xsl:template match="//a">
<xsl:copy>
<xsl:apply-templates select="./*[not(local-name()='b')]"/>
</xsl:copy>
<xsl:apply-templates select="./b"/>
</xsl:template>
Обновление по комментариям
Если вы обрабатываете несколько подэлементов, вы можете работать так:
<xsl:template match="//a">
<xsl:copy>
<xsl:apply-templates select="./*[not(local-name()='b') and not(local-name()='c')]"/>
</xsl:copy>
<xsl:apply-templates select="./b"/>
<xsl:apply-templates select="./c"/>
</xsl:template>