ruby - 巨型 xml 文档的 open-uri 和 sax 解析

标签 ruby xml sax open-uri

我需要连接到外部 XML 文件进行下载和处理 (300MB+)。 然后运行 ​​XML 文档并将元素保存在数据库中。

我已经在使用 Saxerator 的生产服务器上执行此操作没问题温柔对待内存。它很好用。这是我现在的问题 --

我需要使用 open-uri(尽管可能有其他解决方案?)来抓取要解析的文件。这个问题是 open-uri 必须在任何内容开始解析之前加载整个文件,这违背了使用 SAX 解析器节省内存的全部目的……有什么解决方法吗?我可以只从外部 XML 文档中读取吗?我无法加载整个文件,否则它会使我的服务器崩溃,并且由于该文档每 30 分钟更新一次,我不能只在我的服务器上保存它的副本(尽管这是我目前正在做的以确保一切正常).

我正在做这个 Ruby,p.s.

最佳答案

您可能想尝试 Net::HTTP 的 streaming interface而不是开放 URI。这将为 Saxerator(通过底层的 Nokogiri::SAX::Parser)提供一个 IO 对象而不是整个文件。

关于ruby - 巨型 xml 文档的 open-uri 和 sax 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634792/

相关文章:

xml - 如何使用 Microsoft xslt 1.0 高效地稍微修改大型 xml 文档

Java SAX 解析。获取当前正在解析的 xml 文件中的文件行

ruby - Capistrano错误: could not connect to ssh-agent

ios - Flutter 调试 : Warning: CocoaPods not installed. 跳过 pod 安装

asp.net - 批量发送数据到存储过程

java - 包R错误

java - XML 公共(public)标识符中无法识别波浪号

java - 在 SAX 解析期间确定根元素

ruby - ruby 脚本中的 CSS 选择器和条件

ruby - 将具有十六进制 ASCII 代码的字符串转换为字符