问题 我如何懒惰地解析Clojure中的大型XHTML文件?


我有一个有效的XHTML文件(100兆字节的数据)和一个大表。第一个是列(用于数据库),所有其他tr是数据。它是整个文档中唯一的表,它在结构html-> body-> div-> table中。

我如何在Clojure中解析它的懒惰方式?

我知道 data.xml中 但因为我是Clj初学者,所以我很难让它发挥作用。特别是因为REPL在处理如此大的文件时非常慢。


8674
2018-01-15 08:22


起源

也可以看看 stackoverflow.com/questions/9939844/huge-xml-in-clojure - Korny


答案:


data.xml docs说它创建了一个文档的懒树: 解析。我在当地检查过,这似乎是真的:

; Load libs
(require '[clojure.data.xml :as xml])
(require '[clojure.java.io :as io])

; standard.xml is 100MB xml file from here http://www.xml-benchmark.org/downloads.html
(def xml-tree (xml/parse (io/reader "standard.xml")))
(:tag xml-tree) => :site

(def child (first (:content xml-tree)))
(:tag child) => :regions

(dorun (:content xml-tree)) => REPL hangs for ~30 seconds on my computer because it tries to parse whole file

15
2018-01-15 08:39



+1为 xml-benchmark.org/downloads.html。很好找。 - webnoob
使用xml / parse结果的一种惯用方法是使用zip / xml-zip以及data.zip中定义的特定于XML的zip过滤器 - 谷歌“Clojure xml zip”用于一些过时的教程。 - Alex