由于某种原因xsl:在for-each-group内部排序因为升级到Saxon 9.7.0.1而引发异常
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中工作的方式而改变的东西
答案 0 :(得分:3)
IncompatibleClassChangeError
通常意味着JVM在运行时加载了一个类,它与编译时的方式不同。也就是说,代码是使用类路径编译的,该类路径包含与运行时加载的版本不同的某些库类的版本。
要研究的两种可能的理论:
(a)在这种情况下,从表面上看,所涉及的所有类似乎都是Saxon类,所以这可能表明你在类路径上有多个版本的Saxon,并且由于某种原因代码正在从两者加载。
(b)另一方面,我可以看到屏幕截图的底部,半裁剪,一条线表明您正在使用启用了字节码生成的Saxon-EE,这可能表示存在错误在字节码生成中。尝试禁用字节码生成以查看问题是否消失。例如,通过调用Processor.setConfigurationProperty(FeatureKeys.GENERATE_BYTECODE, false)
。
如果它确实是字节码生成错误,请将其记录在http://saxonica.plan.io,以便我们可以正确跟踪它。我们几乎肯定需要访问一个演示问题的样式表。
答案 1 :(得分:1)
我不认为这是一个真正的修复,但是,神秘的是,你可以在for-each-group体中添加<xsl:value-of select="current-grouping-key()"/>
语句,异常消失了。它可以在评论中。
<xsl:template match="table[@class='vv']" mode="copy">
<div class="row">
<xsl:for-each-group select="tr" group-by="td[1]/text()">
<xsl:sort/>
<xsl:comment><xsl:value-of select="current-grouping-key()"/></xsl:comment>
test
</xsl:for-each-group>
</div>
</xsl:template>