2010-12-14 115 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