最小但非常慢的xsl

时间:2015-08-06 09:34:52

标签: xml xslt saxon oxygenxml

我有两个xml文件(一个有2000个,另一个有大约9000个项目),比如这个

<list>
    <mods ID="uuid-1...">
        <stuff/>
    </mods> 
    <mods ID="uuid-2..."/>
    ...
</list>

我使用以下xsl将每条记录拆分为自己的文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mods="http://www.loc.gov/mods/v3"
    exclude-result-prefixes="xs" 
    version="2.0">

    <xsl:template match="/">
        <xsl:for-each select="list/mods:mods">
            <xsl:result-document method="xml" indent="yes" omit-xml-declaration="yes" href="{./@ID}.xml">

                    <xsl:copy-of select="." />

            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

对于较小的列表,这需要几秒钟直到完成,对于较长的列表,它需要几个小时。它会返回所需的结果,但仍然有办法加快速度吗? 我使用Saxon 9.6.0.5

1 个答案:

答案 0 :(得分:0)

基于这里的所有评论是一些结果,我不是一个非常技术性的人,但我在尝试不同的建议时监控cpu和内存使用情况。这一切都在os x 10.10.4 Java 1.8.u51撒克逊9.6EE和9.6HE上。

唯一可能有fs扫描的东西是变换脚本本身(不是数据文件),它是git repo的一部分。 OP的变换完成时间:11789.9s(3.27小时),使用来自氧气17.1的Saxon9.6EE。

添加虚拟元素 - 没有变化(没有让它完成)。

今天使用基本相同的xsl变换,使用包含70,000个片段的不同文件一起进行更多测试,每个文件100mb xml。

将所有内容复制到不属于oXygen项目(.xpr)的目录,或git的一部分:1小时后取消,但速度大致相同。

使用终端撒克逊9.6HE:花费更少的时间让我重新装满水杯,在30秒内完成7万件而不是10 000件。

我注意到没有指定任何xmx语句的cli使用了高达60%的cpu和非常小的ram(2gb)。在整个操作过程中,氧气从未使用超过30%的CPU和约3gb的压力(氧气中的xmx达到4gb)。

感谢您的输入,我惊讶地发现命令行与使用oXygen的速度要快得多。