由于某种原因,自升级到 Saxon 9.7.0.1 以来,for-each-group 中的 xsl:sort 抛出异常
XML-
<table class="vv">
<tr><td>woot1</td><td>woot2</td></tr>
<tr><td>woot1</td><td>woot2</td></tr>
<tr><td>woot1</td><td>woot2</td></tr>
<tr><td>woot1</td><td>woot2</td></tr>
</table>
XSL-
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="table[@class='vv']">
<div class="row">
<xsl:for-each-group select="tr" group-by="td[1]/text()">
<xsl:sort/>
test
</xsl:for-each-group>
</div>
</xsl:template>
错误-
只是想验证这是 Saxon 中的一个错误还是 XSLT 3.0 中的工作方式有所改变
最佳答案
IncompatibleClassChangeError
通常意味着 JVM 在运行时加载了一个类,这与编译时的方式不同。也就是说,代码是使用类路径编译的,其中包含与运行时加载的版本不同的某些库类版本。
两个可能的研究理论:
(a) 在这种情况下,从表面上看,所有涉及的类似乎都是 Saxon 类,因此这可能表明您在类路径上有多个版本的 Saxon,并且由于某种原因代码正在从两者加载。
(b) 另一方面,我可以在你的屏幕截图底部看到一条线,它被裁剪了一半,这表明你正在使用启用了字节码生成的 Saxon-EE,这可能表明存在错误在字节码生成中。尝试禁用字节码生成以查看问题是否消失。例如通过调用 Processor.setConfigurationProperty(FeatureKeys.GENERATE_BYTECODE, false)
。
如果确实是字节码生成错误,请在 http://saxonica.plan.io 上记录,所以我们可以正确地跟踪它。我们几乎肯定需要访问演示问题的样式表。
关于xml - xsl :sort inside for-each-group(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34623667/