2013-01-15 64 views
11

Mam prawidłowy plik XHTML (100 megabajtów danych) z jedną dużą tabelą. Pierwsze tr są kolumnami (dla bazy danych), wszystkie inne tr są danymi. Jest to jedyna tabela w całym dokumencie i ma strukturę html-> body-> div-> table.Jak leniwie parsować duży plik XHTML w Clojure?

Jak mogę lenić to w Clojure?

Wiem o data.xml, ale ponieważ jestem początkującym Clj, bardzo trudno jest mi pozwolić działać. Zwłaszcza, że ​​REPL działa bardzo wolno podczas pracy z tak dużym plikiem.

+0

Zobacz także http://stackoverflow.com/questions/9939844/huge-xml-in-clojure – Korny

Odpowiedz

15

data.xml Dokumenty mówią, że tworzy on leniwy drzewo dokumentu: parse. Sprawdziłem lokalnie i to wydaje się być prawdą:

; 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 
+2

+1 http: //www.xml-benchmark .org/downloads.html. Miłe znalezisko. – webnoob

+0

Jednym idiomatycznym sposobem użycia wyniku xml/parsowanie jest użycie zip/xml-zip wraz z filtrami zip specyficznymi dla XML zdefiniowanymi w data.zip - Google "Clojure xml zip" dla niektórych nieaktualnych samouczków. – Alex