Я думаю, что использование режима, например
<xsl:template match="node() | @*" mode="change">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="change"/>
</xsl:copy>
</xsl:template>
<xsl:template match="d:chapter" mode="change">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="*"/>
<xsl:element name="section" xmlns="http://docbook.org/ns/docbook">
<d:title> Cette section a été ajoutée </d:title>
<d:para> ce texte a été ajouté </d:para>
</xsl:element>
</xsl:copy>
</xsl:template>
<xsl:variable name="content">
<xsl:apply-templates mode="change"/>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="exsl:node-set($content)/node()"/>
</xsl:template>
- это чистый способ разделения шагов.