Xslt 等于性能改进

Xslt equals performance improvement

我想提高我的 xslt 2.0 的性能。我使用 saxon-sa 9.0.0.5 作为 xslt 处理器。在分析的帮助下,我找到了瓶颈。这是我提取的瓶颈代码

<xsl:variable name="party" select="/drawdownInventoryAndEventNotification/party"/> -- 约500方

<xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/> -- union 正在生成大约 20k 项的序列。将这 20k 个项目与 party@id 进行比较是性能的原因。

提前感谢您提供宝贵的解决方案/解决方法。

尝试定义一个键 <xsl:key name="party-by-id" match="/drawdownInventoryAndEventNotification/party" use="@id"/>,然后将 <xsl:apply-templates select="$party[@id = ($abc/@id union $xyz)]"/> 替换为 <xsl:apply-templates select="key('party-by-id', $abc/@id union $xyz)"/>

按照@MartinHonnen 的建议使用密钥是我的第一反应,值得一试,但它可能帮不上什么忙,因为 (a) 虽然 Saxon-SA 9.0 是很久以前的事了,我的回忆可能有问题,我认为 Saxon 优化器应该自动引入密钥,并且 (b) 问题可能出在评估联合上。

并集的结果是否有很多重复?如果是这样,应用 distinct-values() 来消除重复项可能会有所帮助。

如果您想以我们可以 运行 的形式打包它,我们很乐意查看。但前提是您准备好升级到更新的软件版本。