Простое редактирование XML в Clojure

Допустим, у меня есть вектор карт

[{: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))

person KobbyPemson    schedule 27.07.2012    source источник


Ответы (1)


Вы пробовали 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, пользовательским тегом.

person Don    schedule 27.07.2012