gpt4 book ai didi

ruby-on-rails - 解析大型 XML 文件时获取 'Failed to allocate memory'

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:08 24 4
gpt4 key购买 nike

在使用 Nokogiri 解析它时,我一直面临“无法分配内存”的问题。为此,我编写了以下代码。

require 'open-uri'
require 'nokogiri'
f = File.open("/my_pplications/XML/one.xml")
doc = Nokogiri::XML(f)
stack = Hash.new
doc.children.each do |x|
x.children.each do |sx|
sx.children.each do |v|
stack[v.name] = v.text
end
end
end


在这里,如果 one.xml 文件的大小较小,我就能够解析并获取所有内容。但如果该文件太大(超过 700MB),我会收到类似“[FATAL] 分配内存失败” 的错误。那么我该如何解析完整的大型 XML 文件。

谁能帮帮我?

最佳答案

Nokogiri::XML 构建整个文档的内存表示,因此使用的内存比文档在磁盘上的大小多得多。然后很容易遍历它并使用 xpath 或 css 查询。

另一种方法是使用 nokogiri 的 SAX 解析器。 sax 解析器几乎没有任何内存开销,因为它没有将整个文档存储在内存中:它只是遍历文档,告诉您提供的对象有关有趣的事件,例如标签 foo 已经开始,我发现了一些文本,foo 标签已经关闭等

通常使用它比使用更高级别的接口(interface)要多做一些工作,但是您可以通过这种方式吞噬大量的 XML 文件

关于ruby-on-rails - 解析大型 XML 文件时获取 'Failed to allocate memory',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15699243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com