2010-12-14 90 views
4

許多博客引用了clojure.xml/emit(或clojure.contrib.lazy-xml/emit)函數,但它似乎在1.2文檔中不存在。closure.xml/emit發生了什麼?

是否被棄用?什麼取代了它?

它可以用來編寫Clojure編碼的XML(例如:{:tag :address :content {:tag :street ...} })嗎?

更新:我看了看源代碼clojure.contrib.lazy-xml/emit(由克里斯·豪澤),雖然它也並非「官方」,看起來比clojure.xml/emit更穩定的解決方案。

順便說一句,我已經「發現」了clojure和clojure-contrib源代碼,作爲寫得很好的慣用Clojure的很好的例子(特別是由大師Rich Hickey,兩位Stuart和Chris Houser等編寫的部分)。 )我需要花一些時間學習這些代碼。

回答

5

奇怪的是,當(use 'clojure.xml)那個名稱空間在1.2.0的REPL中時,clojure.xml/emit仍然存在。

驗證:

user=> (use 'clojure.xml) 
user=> (emit (parse "http://feeds.feedburner.com/burningonesblog")) 

完全公開,我發現這個使用有用(ns-map 'user)功能

user=> (doc ns-map) 
------------------------- 
clojure.core/ns-map 
([ns]) 
    Returns a map of all the mappings for the namespace. 
nil 

現在,請注意,您對於自己從文檔中1.2消失完全正確(clojure.xmlclojure.contrib.lazy-xml),除了prxml之外的其他東西都不是你想要的。我無法說出爲什麼會出現這種情況,但通過查看文檔字符串,他們不再顯示在Web界面中的原因變得明顯。

user=> (doc emit) 
------------------------- 
clojure.xml/emit 
([x]) 
    nil 
nil 

現在有這個線程在在Google Group這表明使用emit功能是不鼓勵有2個原因。

  1. 它是無證的,因此如有更改,恕不另行通知。
  2. 它通常不會產生有效的XML(儘管我想如果你知道你的數據是有效的,它會發出有效的XML)。

在該主題結束時,Stuart Halloway談論了一個擴展Clojure XML支持的項目。

當然,總是會陷入Java池中,並在Java端使用任何優秀的XML工具。聽起來clojure的XML故事大部分都是在這個時候解析的。

希望有所幫助。

+0

謝謝。我檢查了xml.clj的源代碼,果然,文檔字符串消失了。我會向谷歌組織發佈一個問題(Rich Hickey掛在那裏)。 – Ralph 2010-12-14 16:58:37

0

如果您正在運行clojure 1.2,則有clojure.contrib.prxml。

如果您正在運行的Clojure 1.3,替換被認爲是https://github.com/clojure/data.xml

然而,根據「在哪裏做clojure.contrib去」的文件上dev.clojure.org,新的lib沒有一個版本庫,它可能會在某個地方建立並在Maven回購中,但我無法找到它。儘管你自己打包很容易。

我有這樣的使用prxml一些舊代碼,所以我結束了剛剛殺青了prxml使用Clojure 1.3工作,這是對clojars.org https://clojars.org/weissjeffm/clojure.prxml

它已經爲我工作很好,但你的里程可能會有所不同。

+1

clojure.data.xml正在等待構建系統的更改,因爲它依賴於Java 6(Clojure中的所有其他功能都基於Java 5)。這是出於性能原因。一旦解決這個基礎設施故障,它應該再次成爲推薦的庫。 – 2012-02-21 01:47:03