Есть значит документ с элементами /data/abc и /data/def, в каждом из которых свой набор подэлементов. Нужно средствами XSL скопировать из /data/abc все содержимое (элементы и их аттрибуты) внутрь нового элемента, одновременно переделывая некоторые конструкции по заданным для них шаблонам (например, если встретился элемент element1 в любом месте /data/abc).
Первый вариант реализации был:
<xsl:template match="/">
<something>
<xsl:apply-templates select="/data/abc"/>
</something>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element1">
...
</xsl:template>
Если сделать так
<xsl:template match="/data/abc">
<something>
<xsl:apply-templates select="*"/>
</something>
</xsl:template>
Какую-то последнюю мелочь упускаю, но до сих пор не могу догадаться.