排除结果前缀= "xmlns"



在。net中,下面的xslt是正确的。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
exclude-result-prefixes="table xmlns">

但是在java中,如果我使用saxon,

exclude-result-prefixes="xmlns"

将生成以下错误:

在worksheets.xsl第52行出现xsl:stylesheet错误:没有声明名称空间前缀xmlns

首先,哪个产品是正确的这个相当枯燥的问题。XSLT 1.0规范对exclude-result-prefixes说:"如果没有名称空间绑定到带有exclude-result-prefixes或xsl:exclude-result-prefixes属性的元素上的前缀,则会出现错误。"为元素"绑定"(在作用域中)的名称空间前缀与XPath数据模型http://www.w3.org/TR/xpath/#namespace-nodes中定义的一样,如果您非常仔细地阅读该模型,就会发现前缀"xmlns"没有作用域中绑定。XPath 2.0更清楚地说明了这一点:"名称空间节点既不能有名称xmlns,也不能有字符串值http://www.w3.org/2000/xmlns/.",但这只是一种澄清,而不是实质性的更改。

现在更有趣的问题是如何实现你想要实现的目标。我认为你实际上并没有告诉我们你想要达到什么目的。一些回复推测exclude-result-prefixes="#default"将解决您的问题,但在建议之前,我很想知道您的问题是什么。

根据XSLT规范,使用#default,例如:exclude-result-prefixes="#default"

参考:http://www.w3.org/TR/xslt文字结果元素

在exclude-result-prefixes中包含xmlns是错误的,Xml规范禁止显式声明xmlns名称空间前缀:

前缀xmlns仅用于声明名称空间绑定,并且根据定义绑定到名称空间名称http://www.w3.org/2000/xmlns/。它绝对不能被宣布。其他前缀绝对不能绑定到此命名空间名称,并且它绝对不能被声明为默认命名空间。元素名不能有前缀xmlns.

因此,在exclude-result-prefixes中包含xmlns是没有意义的,因为它不是一个有效的前缀。欲了解更多信息,请参见http://www.w3.org/TR/xml-names/#ns-decl

最新更新