2012-06-26 60 views
0

clojure-xml/parse返回一個xml文件的映射。clojure-xml/parse是否會返回一個懶惰的序列?

(ns xml-lib.core 
    ^{:author "Charles M. Norton", 
    :doc "xml-lib is an xml parsing library built on clojure-xml. 
     Created on June 26, 2012"} 
    (:require [clojure.string :as cstr]) 
    (:require [util.core :as utl]) 
    (:require [clojure.xml :as cjxml])) 

(defn ret-xml-data 
    "Returns a map of the supplied xml file." 
    [xml-fnam] 

    (let [test-file-nam (utl/open xml-fnam)] 
    (cjxml/parse xml-fnam)) 

返回的地圖是否懶惰,還是應該將解析調用傳遞給一個惰性序列函數?

謝謝。

(ret-xml-data "test.xml") 

return(result truncated)。

{:tag :TamperExport, :attrs {:xmlns "http:// 
+0

如果你想懶洋洋地使用Clojure解析XML,我建議[clojure.data.xml(https://開頭的github .com/clojure/data.xml),這是以前clojure-xml中clojure-contrib的繼承者。 –

回答

1

它使用一個SAX解析器,它將消耗整個xml文檔,所以我認爲它會創建完全實現的數據結構。

+0

這意味着我應該讓它懶惰?我假設因爲你使用了「完全實現」這個短語。謝謝。 – octopusgrabbus

+0

我的意思是它是一個完整的數據結構,所以它已經存在 - 在內存中;所有的。 – Bill

+2

SAX解析器並不一定意味着它創建了一個完全實現的數據結構,儘管在這種情況下這是正確的。舊的contrib.lazy-xml在一個將元素放入隊列的新線程中啓動了解析器,並返回了一個將元素從隊列中拉出的seq。 – Alex

3

短anser是否,clojure-xml可能不會做你想做的。

data.xml中是懶惰sucessor到Clojure中的XML

https://github.com/clojure/data.xml

+0

謝謝。我明天會去看看。 – octopusgrabbus

+0

這很有用,但它是一個評論,而不是對問題的回答(順便說一句,這是「不」)。它可以改寫成一個答案(微調,微調)。 –

+0

固定,謝謝指出:) –