XSLT имеет специальную встроенную функцию, которая поддерживает генерацию вывода, а именно XSLT .
Это директива <xsl:namespace-alias>
XSLT.
Как объяснено XSLT 1.0 Spec .:
"
<!-- Category: top-level-element -->
<xsl:namespace-alias
stylesheet-prefix = prefix | "#default"
result-prefix = prefix | "#default" />
Таблица стилей может использовать элемент xsl:namespace-alias
, чтобы объявить, что один URI пространства имен является псевдонимом для другого URI пространства имен. Когда буквенный URI пространства имен объявлен как псевдоним другого URI пространства имен, тогда URI пространства имен в результирующем дереве будет URI пространства имен, для которого буквенный URI пространства имен является псевдонимом, а не сам URI буквального пространства имен. Элемент xsl:namespace-alias
объявляет, что URI пространства имен, связанный с префиксом, указанным атрибутом stylesheet-prefix
, является псевдонимом для URI пространства имен, связанного с префиксом, указанным атрибутом result-prefix
. Таким образом, атрибут stylesheet-prefix
указывает URI пространства имен, который будет отображаться в таблице стилей, а атрибут result-prefix
указывает соответствующий URI пространства имен, который будет отображаться в дереве результатов.
«
Вот небольшой пример преобразования, которое генерирует xsl:stylesheet
, содержащее xsl:variable
, , которое построено требуемым образом:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="my:dummyNS" exclude-result-prefixes="xxx"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>
<xsl:template match="/*">
<xxx:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xxx:variable name="{@name}">
<xsl:value-of select="."/>
</xxx:variable>
</xxx:stylesheet>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML:
<v name="myVarName">myValue</v>
желаемый результат выдается:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="myVarName">myValue</xsl:variable>
</xsl:stylesheet>
Тогда следующим шагом будет запуск в вашем «скрипте» этого динамически генерируемого XSLT-преобразования .