3
我使用下面的XSL 2.0代码来查找包含我给出的索引列表的文本节点的ID。该代码完美地工作,但对于性能而言,对于大型文件来说花费很长时间。即使对于大文件,如果索引值很小,那么结果在几毫秒内就会很快。我正在使用saxon9he Java处理器来执行XSL。提高XSL的性能
<xsl:variable name="insert-data" as="element(data)*">
<xsl:for-each-group
select="doc($insert-file)/insert-data/data"
group-by="xsd:integer(@index)">
<xsl:sort select="current-grouping-key()"/>
<data
index="{current-grouping-key()}"
text-id="{generate-id(
$main-root/descendant::text()[
sum((preceding::text(), .)/string-length(.)) ge current-grouping-key()
][1]
)}">
<xsl:copy-of select="current-group()/node()"/>
</data>
</xsl:for-each-group>
</xsl:variable>
在上面的解决方案,如果该指标值过于庞大说270962则采取了XSL执行的时间为83427ms。在大文件中,如果索引值很大,则表示4605415,4605431需要几分钟才能执行。似乎计算变量“插入数据”需要时间,尽管它是一个全局变量并且只计算一次。 XSL应该被添加还是处理器?我如何提高XSL的性能?
感谢您的回购。将尽快尝试并更新。 – Rachel 2010-05-13 20:29:29
太棒了,反应在几毫秒内。它已经从82242减少到813.非常感谢!结果中不包含“数据”节点的值。行: 正在读取, 。 –
Rachel
2010-05-13 20:54:13
@Rachel:很高兴听到您的回复时间有所改善。我的原始键定义中存在一个错误,您需要使用' '来获得正确的结果。 –
markusk
2010-05-13 21:07:16