我该如何使用Clojure懒惰地解析大型XHTML文件?

12
我有一个有效的XHTML文件(100兆字节的数据),其中包含一个大表格。第一行是列(用于数据库),所有其他行都是数据。它是整个文档中唯一的表格,位于结构html->body->div->table中。
如何以Clojure的惰性方式解析它?
我知道data.xml,但因为我是Clj初学者,让它工作对我来说非常困难。特别是当REPL与这样一个大文件一起工作时非常缓慢。

1
请参见https://dev59.com/fWkw5IYBdhLWcg3wXpec。 - Korny
1个回答

15

data.xml 文档中表示它创建了一个文档的惰性树: parse。我在本地进行了检查,似乎是真的:

; 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

使用xml/parse的一种惯用方式是与data.zip中定义的XML特定zip过滤器一起使用zip/xml-zip - 可以在Google上搜索“Clojure xml zip”获取一些过时的教程。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接