2013-01-15 96 views
11

मेरे पास एक बड़ी तालिका के साथ वैध एक्सएचटीएमएल फ़ाइल (100 मेगाबाइट डेटा) है। पहला tr कॉलम (डेटाबेस के लिए) हैं, अन्य सभी टीआर डेटा हैं। यह पूरे दस्तावेज़ में एकमात्र टेबल है और यह संरचना एचटीएमएल-> body-> div-> तालिका में है।क्लोजर में मैं बड़ी एक्सएचटीएमएल फाइल को आलसी तरीके से कैसे पार्स कर सकता हूं?

क्लोजर में मैं इसे आलसी तरीके से कैसे पार्स कर सकता हूं?

मुझे data.xml के बारे में पता है, लेकिन क्योंकि मैं क्लज शुरुआत कर रहा हूं, यह मेरे लिए काम करना बहुत मुश्किल है। खासकर क्योंकि ऐसी बड़ी फाइल के साथ काम करते समय आरपीएल बहुत धीमी है।

+0

भी देखें http://stackoverflow.com/questions/9939844/huge-xml-in-clojure – Korny

उत्तर

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

+1 http के लिए: //www.xml-benchmark .org/downloads.html। अच्छा लगता है। – webnoob

+0

xml/parse के परिणाम का उपयोग करने का एक मूर्ख तरीका डेटा/ज़िप में परिभाषित एक्सएमएल-विशिष्ट ज़िप फ़िल्टर के साथ ज़िप/एक्सएमएल-ज़िप का उपयोग है - कुछ पुराने ट्यूटोरियल के लिए Google "क्लोजर एक्सएमएल ज़िप"। – Alex