Вы можете динамически установить пространство имен элемента:
<param name="ns1" >http://localhost/ns1</param>
...
<xsl:element name="test" namespace="{$ns1}" >... </xsl:element>
Но это не выводит префикс пространства имен - он меняет пространство имен по умолчанию для этого элемента.
Я не думаю, что есть способ вывести префиксы с динамическим URI пространства имен.
Что-то вроде: <xyz:test xmlns:xyz="{$ns1}">
выводит именно это буквально: <xyz:test xmlns:xyz="{$ns1}">
Если это действительно тот результат, который вам нужен, то я думаю, что у вас есть
модифицировать сериализатор или просто произвести вывод с URI заполнителя и
сделать замену текста на выходной текст XML.
[XSLT не обрабатывает синтаксис XML. Обрабатывает деревья XML.
Разбор ввода и сериализация вывода находятся за пределами его области. ]