java - XSLT 处理巨大的 XML 文件(几乎 5 GB)

标签 java php xml xslt xpath

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

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

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

>msxsl.exe myfile.xml mysheet.xslt -o 输出.xml

文件大于 800MB 时,内存不足(代码:0x8007000e)。

  • 使用 Mozilla Firefox 或 IE 通过处理指令应用 XSLT:
  • <根目录>...

    几分钟后浏览器崩溃。

  • 尝试在 Windows 上用 PHP(版本 5.4.22)编写我自己的 XML 阅读器,并使用 XPath 选择我需要的元素
  • ini_set('max_execution_time', 0);

    ini_set('内存限制'​​, '-1');

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

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

    ...

    ... ...

    }

    ... ……

    Apache 服务器崩溃。

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

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

    最佳答案

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

    关于java - XSLT 处理巨大的 XML 文件(几乎 5 GB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399697/

    相关文章:

    java - 在 XML Validator 上设置 ErrorHandler 会导致不正确的验证

    java - 这种类型的Object意味着什么?

    php - .htaccess 强制 'www.' 并将其余 url 正常附加到末尾

    java - Spring JPA/hibernate : Failed to import bean definitions

    java - 使用简单 XML 反序列化多态类

    php - mysql 而非空列

    java - 如何显示组合的算术表达式?就像 (3.3+6.2)*1.2 而不是 9.5 * 1.2

    java - Spring 如何从返回 CompletableFuture 对象的端点获取结果?

    java - 如何在 javax.xml.transform.Transformer.transform 的输出中保留输入声明的编码? (例如避免将 UTF-16 更改为 UTF-8)

    javascript - 我在 fullpost.php 中有一个评论表单,而插入表单在 sql.php 中,如何获取评论表的 post_id ?