【问题标题】:What happened to clojure.xml/emit?clojure.xml/emit 发生了什么?
【发布时间】:2011-05-25 08:11:15
【问题描述】:

许多博客都提到了 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 等)我需要花一些时间研究该代码。

【问题讨论】:

    标签: xml clojure


    【解决方案1】:

    奇怪的是,当你在 1.2.0 的 REPL 中 (use 'clojure.xml) 时,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
    

    现在请注意,除了 prxml 之外,您完全正确地认为它们从 1.2(clojure.xmlclojure.contrib.lazy-xml)的文档中消失,这并不是您真正想要的。我无法解释为什么会这样,但他们不再出现在 Web 界面中的原因在检查他们的文档字符串时变得很明显。

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

    现在Google Group 上有这个线程,这表明不鼓励使用emit 函数有两个原因。

    1. 它没有记录,因此如有更改,恕不另行通知。
    2. 一般来说,它不会产生有效的 xml(尽管我想如果你知道你的数据是有效的,它会发出有效的 xml)。

    在该主题的结尾,Stuart Halloway 谈到了一个扩展 Clojure 的 XML 支持的项目。

    当然,总是有机会进入 Java 池并在 Java 端使用任何出色的 XML 工具。听起来 clojure 的 XML 故事现在主要是在解析中讲述的。

    希望对您有所帮助。

    【讨论】:

    • 谢谢。我检查了 xml.clj 的源代码,果然,文档字符串不见了。我会向 google 群组发布一个问题(Rich Hickey 在那里闲逛)。
    【解决方案2】:

    如果您运行的是 clojure 1.2,则有 clojure.contrib.prxml。

    如果您运行的是 clojure 1.3,则替换应该是 https://github.com/clojure/data.xml

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

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

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

    【讨论】:

    • clojure.data.xml 正在等待对构建系统的更改,因为它依赖于 Java 6(Clojure 中的所有其他内容都基于 Java 5 构建)。这是出于性能原因。一旦解决了这个基础设施故障,它应该再次成为推荐的库。
    猜你喜欢
    • 2019-09-20
    • 2016-02-28
    • 2014-02-28
    • 2010-10-02
    • 2020-03-14
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多