我有两个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
答案 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的速度要快得多。