0

我有两个这样的 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>

对于较小的列表,这需要几秒钟才能完成,对于较长的列表则需要数小时。它返回所需的结果,但仍有办法加快速度吗?我使用撒克逊 9.6.0.5

4

1 回答 1

0

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

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

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

今天对包含 70 000 个片段的不同文件进行更多测试,这些文件总共 100mb 的 xml,使用基本相同的 xsl 转换。

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

使用终端 Saxon 9.6HE:比我重新装满水杯所需的时间更少,在 30 秒内完成了 70 000 件物品而不是 10 000 件。

我注意到没有指定任何 xml 语句的 cli 最多使用了我的 cpu 的 60% 和很少的 ram (2gb)。在整个操作过程中,氧气从未使用超过 30% 的 CPU 和大约 3gb 的内存(氧气中的 xmx 增加到 4gb)。

感谢您的输入,与使用 oXygen 相比,命令行速度快了多少让我感到震惊。

于 2015-08-07T19:31:50.570 回答