closure.xml / emit发生了什么?

时间:2010-12-14 15:05:46

标签: 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)的源代码,虽然它也不是“官方”,但它看起来比{{{}更稳定。 1}}。

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

2 个答案:

答案 0 :(得分:5)

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

验证:

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

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

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

现在Google Group上有这个帖子,表示不鼓励使用emit功能。

  1. 没有记录,因此如有更改,恕不另行通知。
  2. 一般来说,它不会产生有效的xml(虽然我想如果你知道你的数据是有效的,它会发出有效的xml)。
  3. 在该主题结束时,Stuart Halloway谈到了一个扩展Clojure XML支持的项目。

    当然,总是会深入Java池并使用Java端的任何优秀的XML工具。听起来好像clojure的XML故事主要是在解析时告诉他们。

    希望有所帮助。

答案 1 :(得分:0)

如果您正在运行clojure 1.2,则有clojure.contrib.prxml。

如果您正在运行clojure 1.3,则替换应为https://github.com/clojure/data.xml

然而根据dev.clojure.org上的“哪里有clojure.contrib去”文档,新的lib还没有存储库,它可能是在某个地方构建并在maven repo中,但我无法找到它。打包自己很容易。

我有一些使用prxml的遗留代码,所以我最终修复了prxml以使用Clojure 1.3,它位于clojars.org https://clojars.org/weissjeffm/clojure.prxml

这对我来说很好,但你的里程可能会有所不同。