XSLT 有一个特殊的内置特性,它支持生成输出,这就是 XSLT本身。
这是<xsl:namespace-alias>
XSLT 指令。
正如 XSLT 1.0 Spec所解释的那样:
"
<!-- 分类:顶级元素 -->
<xsl:命名空间别名
样式表前缀 = 前缀 | “#默认”
结果前缀 = 前缀 | "#default" />
样式表可以使用该xsl:namespace-alias
元素来声明一个命名空间 URI 是另一个命名空间 URI 的别名。当一个文本命名空间 URI 被声明为另一个命名空间 URI 的别名时,结果树中的命名空间 URI 将是文本命名空间 URI 作为别名的命名空间 URI,而不是文本命名空间 URI 本身。该xsl:namespace-alias
元素声明绑定到属性指定前缀stylesheet-prefix
的命名空间URI 是绑定到属性指定前缀的命名空间URI 的别名result-prefix
。因此,该stylesheet-prefix
属性指定将出现在样式表中的命名空间 URI,而该result-prefix
属性指定将出现在结果树中的相应命名空间 URI。"
下面是一个生成xsl:stylesheet
包含 an的转换的小示例xsl:variable
,它以所需的方式构造:
<xsl:stylesheet 版本="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xxx="my:dummyNS" 排除结果前缀="xxx"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="xxx"/>
<xsl:template match="/*">
<xxx:stylesheet 版本="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xxx:变量名="{@name}">
<xsl:value-of select="."/>
</xxx:变量>
</xxx:样式表>
</xsl:模板>
</xsl:stylesheet>
When this transformation is applied on the following XML document:
<v name="myVarName">myValue</v>
the wanted result is produced:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="myVarName">myValue</xsl:variable>
</xsl:stylesheet>
Then the next step will be to launch in your "script" this dynamically generated XSLT transformation.