XSLT имеет специальную встроенную функцию, поддерживающую создание вывода, который сам является XSLT.
Это директива XSLT <xsl:namespace-alias>
.
Согласно спецификации XSLT 1.0 сильный>а>.:
"
<!-- 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-преобразования.
person
Dimitre Novatchev
schedule
11.12.2008