Xslt等于性能提升

时间:2015-07-07 14:30:53

标签: xml performance xslt xslt-2.0 saxon

我想提高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的比较是表现的原因。

提前感谢您提供有价值的解决方案/解决方法。

2 个答案:

答案 0 :(得分:2)

尝试定义密钥<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)"/>

答案 1 :(得分:1)

使用@MartinHonnen建议的密钥将是我的第一反应,值得尝试,但它可能没有多大帮助,因为(a)尽管Saxon-SA 9.0很久以前,我的回忆可能是我认为Saxon优化器应该自动引入密钥,并且(b)问题可能在于评估联合。

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

如果您想以我们可以运行的形式打包它,我们很乐意看一下。但前提是您已准备好继续使用更新的软件版本。