1

我们一直在使用 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 中同样验证。

现在我的问题是在这种情况下有效的属性名称。请解释 ??

4

2 回答 2

1

它不是有效的属性名称。xmlns是用于指定命名空间声明的保留前缀。

于 2013-08-29T07:06:39.057 回答
0

它违反了 XSLT 2.0 规范中的这条规则:

[ERR XTDE0860] 在 xsl:attribute 指令没有命名空间属性的情况下,如果 name 属性的有效值是一个词法 QName,其前缀未在范围内命名空间声明中声明,则这是一个不可恢复的动态错误对于 xsl:attribute 指令。

(仔细阅读数据模型会发现“xmlns”没有在范围内的命名空间声明中声明,尽管“xml”是。)

更确切地说,您不能使用 xsl:attribute 创建名称空间声明:您需要为此目的使用 xsl:namespace。

Xalan 遵循 XSLT 1.0 中的规则。这不太明确表明这种情况是一个错误,但它确实说“如果名称空间属性不存在,那么 QName 使用对 xsl:attribute 元素有效的名称空间声明扩展为扩展名称,不包括任何默认命名空间声明。” 在我看来,这意味着如果未声明前缀,则会导致错误。

于 2013-08-31T11:03:09.417 回答