很多博客都提到了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、两位 Stuart 和 Chris Houser 等编写的部分)我需要花一些时间研究该代码。
最佳答案
奇怪的是,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
现在请注意,您关于它们从 1.2(clojure.xml 和 clojure.contrib.lazy-xml)文档中消失的说法是完全正确的,除了 prxml。这不是你真正想要的。我无法解释为什么会这样,但在检查其文档字符串后,它们不再出现在 Web 界面中的原因变得显而易见。
user=> (doc emit)
-------------------------
clojure.xml/emit
([x])
nil
nil
现在有这个线程在 Google Group这表明不鼓励使用 emit
函数有两个原因。
- 它没有记录在案,因此如有更改,恕不另行通知。
- 它通常不会生成有效的 xml(尽管我想如果您知道您的数据是有效的,它会发出有效的 xml)。
在该线程的末尾,Stuart Halloway 谈到了一个扩展 Clojure 的 XML 支持的项目。
当然,总有人会涉足 Java 池并在 Java 端使用任何优秀的 XML 工具。听起来 Clojure 的 XML 故事主要是在此时的解析中讲述的。
希望对您有所帮助。
关于xml - clojure.xml/emit 发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4440523/