在.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: XTSE0165:命名空间前缀xmlns的第52行的xsl:stylesheet处出错
发布于 2011-07-29 19:49:28
首先,关于哪种产品是正确的这个相当枯燥的问题。XSLT 1.0规范在谈到exclude-result-prefixes时说,“如果没有名称空间绑定到带有exclude-result-prefixes或xsl:exclude-result-prefixes属性的元素上的前缀,那就是错误的。”为元素“绑定”(在作用域中)的名称空间前缀是在XPath数据模型http://www.w3.org/TR/xpath/#namespace-nodes中定义的,如果您仔细阅读它,它会告诉您前缀"xmlns“没有作用域内绑定。XML2.0更清楚地说明了这一点:“命名空间节点不能有名称http://www.w3.org/2000/xmlns/,也不能有字符串值xmlns。”,但这是为了澄清,而不是为了进行实质性的更改。
现在,更有趣的问题是如何实现你想要实现的目标。我认为你实际上并没有告诉我们你想要实现的目标。一些回复推测exclude-result-prefixes="#default“会解决你的问题,但在建议之前,我很想知道你的问题是什么。
发布于 2011-07-29 17:12:50
根据XSLT规范,使用#default,例如:exclude-result-prefixes="#default"。
参考:http://www.w3.org/TR/xslt#literal-result-element
发布于 2011-07-29 16:43:35
在排除结果前缀中包含xmlns是错误的,Xml规范禁止显式声明xmlns名称空间前缀:
前缀xmlns仅用于声明名称空间绑定,并且根据定义绑定到名称空间名称http://www.w3.org/2000/xmlns/。它不能被声明。不能将其他前缀绑定到此命名空间名称,也不能将其声明为默认命名空间。元素名称不能以xmlns为前缀。
因此,在exclude-result-prefixes中包含xmlns是没有意义的,因为它不是一个有效的前缀。有关更多信息,请参阅http://www.w3.org/TR/xml-names/#ns-decl
https://stackoverflow.com/questions/6870307
复制相似问题