2012-07-27 89 views
2

比方說,我有地圖簡單Clojure的XML編輯

[{: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和車隊,但他們似乎有點複雜,我。)

理想我想做到以下幾點

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

回答

5

你嘗試clojure.xml/EMIT元素? :

(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 

所有你需要的則是包裝什麼的到XML與用戶的標籤。