如何解析ruby中的大型xml文件

时间:2014-05-22 11:05:11

标签: ruby xml-parsing nokogiri

我需要在ruby中解析一个大的(4gb)xml文件,最好用nokogiri。我看过很多使用

的代码
File.open(path)

但这需要花费太多时间。是否有选项可以按节点读取xml节点,以防止将文件加载到1。或者解析这么大的文件的最快方法是什么。 最好, 菲尔

3 个答案:

答案 0 :(得分:2)

您可以尝试使用Nokogiri::XML::SAX

  

SAX样式解析器的基本工作方式是创建解析器,   告诉解析器我们感兴趣的事件,然后给予   解析器需要处理一些XML。解析器会在何时通知您   遇到你说你想知道的事件。

答案 1 :(得分:1)

我使用LibXML http://xml4r.github.io/libxml-ruby/require 'xml')及其LibXML :: XML :: Reader API进行此类工作。它比SAX简单,让你几乎可以做任何事情。 REXML也包含类似的API,但它有很多错误。像我提到的那样的流API或SAX不应该对大文件有任何问题。我没有测试Nokogiri。

答案 2 :(得分:0)

您可以尝试一下 - https://github.com/amolpujari/reading-huge-xml

(defnz z y [{:keys [value] :as args}] (println "Z ARGS" args) (println "Z VALUE" value)) ;;(defn z [{:keys [value], :as args}] ;; (do (y args) (println "Z ARGS" args) (println "Z VALUE" value))) (defnz z y [{:keys [value] :as all-args}] (println "Z ARGS" all-args) (println "Z VALUE" value)) ;;(defn z [{:keys [value], :as all-args}] ;; (do ;; (y all-args) ;; (println "Z ARGS" all-args) ;; (println "Z VALUE" value))) (defnz z y [{:keys [value]}] (println "Z ARGS" everything) (println "Z VALUE" value)) ;;(defn z [{:keys [value], :as everything}] ;; (do ;; (y everything) ;; (println "Z ARGS" everything) ;; (println "Z VALUE" value)))

我也尝试过使用ox