2

假设我有一个地图矢量

[{:username "kbee" :firstname "Kay" :lastname "Bee"},
 {:username "jcee" :firstname "Jay" :lastname "Cee"}]

我想为每个地图生成 xml 文件,如下所示

  <user>
   <username>kbee</username>
   <firstname>Kay</firstname>
   <lastname>Bee</lastname>
  </user>

我如何只使用 clojure 核心库来实现这一点。(我看了 enlive 和fleet 但它们对我来说似乎有点复杂。)

理想情况下,我想做以下事情

(map #(spit (str (:username %) ".xml") (gen-xml sometemplate %) map-of-users))
4

1 回答 1

5

你试过 clojure.xml/emit-element 吗?:

(use 'clojure.xml)
(def v [{:username "kbee" :firstname "Kay" :lastname "Bee"},
        {:username "jcee" :firstname "Jay" :lastname "Cee"}])

(defn to-xml [m] (doseq [[k v] m] 
                  (emit-element {:tag k :content [v]}) ))

在 REPL 试用:

user> (to-xml (first v))
<username>kbee
</username>
<firstname>Kay
</firstname>
<lastname>Bee
</lastname>
nil

然后,您所需要做的就是用用户标签包装 to-xml 中的内容。

于 2012-07-27T16:34:51.897 回答