Нет необходимости вызывать другие шаблоны в вашей задаче.Вы можете выполнить практически всю необходимую обработку в template match="toto"
На самом деле в вашем примере кода <xsl:template match="tata">
никогда не используется (с данным входным XML).Создание литерального элемента в шаблоне не приводит к вызову другого шаблона, соответствующего этому элементу.
Эта таблица стилей
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" indent="yes"/>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="toto">
<div class="tata">
<xsl:value-of select="@name"/>
</div>
<div class="tata">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
с этим вводом
<root>
<toto name="foo">
<b>hello</b>
</toto>
</root>
создаеттребуемый результат
<?xml version="1.0" encoding="UTF-8"?>
<div class="tata">foo</div>
<div class="tata">
<b>hello</b>
</div>
Как ответил Деннис, если вы хотите использовать шаблон из другого, используйте элемент <xsl:call-template/>
.Если вы также хотите изменить текущий узел (узел контекста), вы можете использовать
<xsl:apply-templates select="path/to/new/context"/>