XSLT 处理巨大的 XML 文件(将近 5 GB)

Gun*_*hez 2 php java xml xslt xpath

我试图找到一个一致的解决方案,使用 XSLT 来转换巨大的 XML 文件(几乎 5 GB)

Hier是我迄今为止尝试过的:

  1. 从命令行使用 MSXML Parser 4.0 (SP3):

>msxsl.exe myfile.xml mysheet.xslt -o output.xml

这会耗尽内存(代码:0x8007000e)并且文件大于 800MB。

  1. 使用 Mozilla Firefox 或 IE 通过处理指令应用 XSLT:

<?xml version='1.0' encoding='UTF-8'?>

<?xml-stylesheet href="mysheet.xslt" type="text/xsl" ?>

<根>...

几分钟后浏览器崩溃。

  1. 尝试在 Windows 上用 PHP (Ver 5.4.22) 编写我自己的 XML-Reader 并使用 XPath 选择我需要的元素

<?php

ini_set('max_execution_time', 0);

ini_set('memory_limit', '-1');

$xml = simplexml_load_file('myfile.xml');

foreach($xml->xpath('/root/node/atribute[@id="value"]') as $result){

...

……

}

…………

Apache 服务器崩溃。

请谈谈你在这方面的经验...用Java写一个类怎么样?

PS 我不想使用 XmlSplit 之类的软件!

Mic*_*Kay 5

对于 5Gb 源文档,您需要一个流处理器,这意味着 XSLT 3.0,它目前有两个实现,Saxon-EE 和 Exselt。当然,并不是所有的转换都是流式的(例如排序很棘手),但是如果你描述了你想要执行的转换,或者给出它的非流式版本,那么我相信我们可以帮助你变成在流媒体下工作的东西。