Я думаю, что проблема в том, что в шаблоне "a" параметр "b" является набором узлов. Для доступа к этому вам, возможно, придется использовать функцию расширения «набор узлов» в XSL. Он не является частью стандартного XSLT, поэтому вам нужно указать расширение.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="urn:schemas-microsoft-com:xslt">
<xsl:template match="/">
<xsl:call-template name="a">
<xsl:with-param name="b">
<xsl:apply-templates select="text()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="a">
<xsl:param name="b"/>
<xsl:for-each select="ext:node-set($b)">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()">
<aNewTag>
<xsl:value-of select="."/>
</aNewTag>
</xsl:template>
</xsl:stylesheet>
Этот работает только для синтаксического анализатора XML Microsoft (MSXML). Для других процессоров XML, таких как xsltproc, следует использовать пространство имен "http://exslt.org/common".
Это позволяет вам получить доступ к узлу или узлам, которые составляют параметр "b", хотя в моем примере выше я использовал для их итерации.
Вот статья, которая объясняет набор узлов
XML.Com Article