一段时间以来,我们一直在使用Xalan进行XSL转换,最近又移至Saxon进行XSL转换。目前,我正在使用Saxon PE(9.5版本)进行XSL转换1.0版本(向后兼容模式)。尽管我在验证XSL时遇到困难,但它包含一个名为如下所示的属性。
<xsl:attribute name="xmlns:xsl1">
<xsl:value-of select="check"/>
</xsl:attribute>
验证XSL时,出现错误“错误消息:无效的属性名称:{xmlns:xsl1}”,尽管在Xalan中也是如此。
现在我的问题是在这种情况下有效的属性名称。请解释 ??
它违反了XSLT 2.0规范中的以下规则:
[ERR XTDE0860]对于不带名称空间属性的xsl:attribute指令,如果名称属性的有效值是词法QName,且其前缀未在范围内的名称空间声明中声明,则这是不可恢复的动态错误用于xsl:attribute指令。
(仔细阅读数据模型后发现,尽管“ xml”已声明,但未在范围内的命名空间声明中声明“ xmlns”。)
更相关的是,您不能使用xsl:attribute创建名称空间声明:为此,您需要使用xsl:namespace。
Xalan遵循XSLT 1.0中的规则。不太明显的是,这种情况是错误的,但是它确实说:“如果不存在命名空间属性,则使用对xsl:attribute元素有效的命名空间声明,将QName扩展为扩展名称。默认名称空间声明。” 在我看来,这意味着如果未声明前缀,则会导致错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句