使用XSLT,我想知道如何让输出使用样式表的名称空间前缀而不是输入文档的前缀。举例来说,由于这个非常简单的文档:将XSLT输入文档前缀映射到首选值
<?xml version="1.0"?>
<a:node xmlns:a="urn:schemas:blah:"/>
而下面的XSL转换:
<?xml version="1.0"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:blah="urn:schemas:blah:" version="2.0">
<xsl:output indent="yes">
<xsl:template match="/blah:node">
<xsl:copy/><!-- marked -->
</xsl:template>
</xsl:transform>
我可以告诉大家,处理器(Saxon8如果它的事项)承认前缀'的等价blah:'和'a:',但例如fn:in-scope-prefixes()不显示'blah',只显示'a'。更改上述的<!-- marked -->
行:
<node><xsl:value-of select="in-scope-prefixes(.)"/></node>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<node xmlns:blah="urn:schemas:blah:">xml a</node>
我该如何映射输入前缀“a”到“嗒嗒”不知道事先输入文件调用前缀“一“? (所以<xsl:namespace-alias/>
将不适用于我。)
作为进一步的上下文,如果它指向更好的解决方案,这是为了查看外部生成的XML文档。外部进程使用自动生成的前缀'a:','b:','c:'等创建输入文档。我希望能够使用'友好'命名空间前缀显示这些前缀。
更新:所述的被范围前缀()行为是由the definition of Statically known namespaces
好问题(1)。查看我的答案以获取完整的XSLT 1.0和XSLT 2.0解决方案。 – 2010-07-22 01:50:58