使用 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',只有'一种'。将上面的行更改<!-- 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”的情况下,如何将输入前缀“a”映射到“blah”?(所以<xsl:namespace-alias/>
对我不起作用。)
作为进一步的上下文,如果它指向更好的解决方案,那么它是用于查看外部生成的 XML 文档。外部进程使用自动生成的前缀“a:”、“b:”、“c:”等创建输入文档。我希望能够使用“友好”命名空间前缀显示这些前缀。
更新:范围内前缀()行为由静态已知命名空间的定义解释