XSLT1规范,xsl:import
部分对以下内容不是很清楚/直接:
- 如果两者都有
output
标签,将使用什么? - 如果两者都具有命名空间属性 (
xmlns:xsl
( 或其他全局属性 (例如exclude-result-prefixes
(,全球将使用什么? - 。等。。。
我有一个包含所有属性和全局标记的"中心 XSLT"......但是现在我正在导入一些也是独立 XSLT 的 XSLT,所以也许将来我会注意到惊喜......为了避免意外,这个问题。
总结问题:
如果"中心 XSLT"拥有所有 XSLT,是否可以"清空 gobal 标记"? 如果存在冲突,优先规则是什么?
您是在问仅在导入模块中拥有所有声明是否足够,但同时您又说所有模块也是"独立的"XSLT 样式表?对我来说毫无意义。显然,如果导入的模块没有声明,它将不再是完整的样式表,并且在缺少命名空间声明的情况下,它将不再是格式正确的XML。格式错误的 XML 样式表将完全无用。
通常,导入的声明
(物理驻留在导入的样式表模块中的声明(的优先级较低。但需要一些资格。
xsl:output/@method
xsl:output
声明中,如果样式表之间存在冲突,则导入模块优先于导入模块。因此,将使用导入样式表中声明的输出方法。但这里有一个警告:并非所有xsl:output
属性都以相同的方式处理。
命名空间
导入样式表中定义的命名空间(以及前缀(在导入的样式表中不可用。这意味着,如果您定义
xmlns:ns="www.namespace.com"
在导入样式表中,前缀ns
将不会连接到导入模块中的命名空间 URI "www.namespace.com"
。在这种情况下,您需要重新声明命名空间。
如果你思考一下这个事实,就会明白为什么会这样:样式表(模块(不需要导入。应该始终可以单独使用它或导入它。确保样式表保持其独立性的唯一方法是声明其中的所有命名空间。
exclude-result-prefixes
对于像exclude-result-prefixes
这样的属性,我引用迈克尔·凯1 的话,说
应用于导入样式表中元素的
version
、extension-element-prefixes
、exclude-result-prefixes
和xpath-default-namespace
属性以及xml:lang
和xml:space
的值是在它们自己的模块的<xsl:stylesheet>
元素中定义的,而不是在导入模块的<xsl:stylesheet>
元素中定义的。
找到规则的最简单方法当然是简单地测试。在大多数情况下,测试将是一个非常微不足道的测试。例如,在样式表模块中定义两个输出方法:
<xsl:output method="text"/> <xsl:output method="xml"/>
并查看输出是文本还是 XML。
这正是您应该如何找到"...等等......"从你的问题。
1 Michael Kay,XSLT 2.0 和 XPath 2.0 Programmer's Reference,第 358 页