Как можно лениво разобрать большой файл XHTML в Clojure?

У меня есть действительный файл XHTML (100 мегабайт данных) с одной большой таблицей. First tr - это столбцы (для базы данных), все остальные tr - данные. Это единственная таблица в целом документе, и она находится в структуре html- > body- > div- > table.

Как я могу разобрать его ленивым способом в Clojure?

Я знаю о data.xml, но поскольку я начинаю Clj, мне очень сложно позволить ему работать. Тем более, что REPL очень медленный, работая с таким большим файлом.

Ответ 1

data.xml docs говорит, что создает ленивое дерево документа: 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