Простое 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 для достижения этой цели. (Я посмотрел на живой и флот, но они показались мне немного сложными.)
в идеале я хотел бы сделать следующее
(map #(spit (str (:username %) ".xml") (gen-xml sometemplate %) map-of-users))
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, с пользовательским тегом.