我的客户有一个大小为 28 MB(约 7L+ 行代码)的输入 xml 文件,需要使用 Saxon 进行转换。 转换在 Saxon 8 中正常工作。迁移到 Saxon 10.6 EE 后,转换陷入困境并且无法完成处理。
额外观察- 罪魁祸首可能是 XSLT 样式表中的 Xpath,如下所示: /数组/对象[数字[@name='DATA']=1]
将其更改为 /数组/对象[数字[@name='DATA']='1'] 或者 /数组/对象[数字(数字[@name='DATA'])=1] 似乎有效并在约 1.5 秒内提供结果。
请支持。
对此很难提供具体建议。 Saxon 8 是很久以前的事了;事实上,它不是一个版本,而是从 2004 年的 Saxon 8.0 到 2007 年的 8.9 的一系列主要版本。在那段时间,XSLT 2.0 规范正在 W3C 中开发,随着规范的发展,Saxon 实现了该规范的新功能; XSLT 2.0 于 2007 年才最终确定,因此在 Saxon 8.x 的生命周期中,规范不断变化。更改的领域之一是比较不同类型的值的确切规则,例如字符串和整数(如您的示例中所示)。
此外,Saxon 中不断引入新的优化;如果有索引支持,您突出显示的构造可能会明显更快,而如果您的表达式涉及混合类型,则索引会非常困难。
因此结论是,今天的 Saxon 在功能和性能方面都应该比 16-19 年前发布的产品有所发展,这一点也不奇怪。