closure.xml/emit发生了什么?

Ral*_*lph 4 xml clojure

许多博客都引用了clojure.xml/emit(或clojure.contrib.lazy-xml/emit)函数,但1.2文档似乎没有.

它被弃用了吗?什么取代了它?

它可以用来编写Clojure编码的XML(例如:) {:tag :address :content {:tag :street ...} }吗?

更新:我查看了clojure.contrib.lazy-xml/emit(由Chris Houser提供)的源代码,虽然它也不是"官方",但它看起来比一个更稳定的解决方案clojure.xml/emit.

顺便说一下,我已经"发现"了clojure和clojure-contrib源代码作为写得好的惯用语Clojure(特别是由大师,Rich Hickey,两个Stuarts,Chris Houser等编写的部分)的很好的例子.我会需要花一些时间研究那些代码.

Tim*_*her 5

奇怪的是,clojure.xml/emit当您(use 'clojure.xml)在1.2.0的REPL中使用该命名空间时仍然存在.

核实:

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

为了完全披露,我使用有用的(ns-map 'user)功能发现了这一点

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

现在请注意,对于除了prxml之外的所有文件,你完全正确地从1.2(clojure.xmlclojure.contrib.lazy-xml)中的文档中消失了,这不是你真正想要的.我不能说出为什么会这样,但是在检查他们的文档时,他们不再出现在Web界面中的原因变得明显.

user=> (doc emit)
-------------------------
clojure.xml/emit
([x])
  nil
nil
Run Code Online (Sandbox Code Playgroud)

现在谷歌集团有这个线程,表明emit不鼓励使用该功能有两个原因.

  1. 它没有记录,因此如有变更​​,恕不另行通知.
  2. 它通常不会产生有效的xml(虽然我想如果你知道你的数据是有效的,它会发出有效的xml).

在该主题的最后,Stuart Halloway谈到了一个扩展Clojure的XML支持的项目.

当然,总是潜入Java池并使用Java端的任何优秀的XML工具.听起来好像clojure的XML故事主要是在解析这一点时讲述的.

希望有所帮助.