将Clojure映射转换为XML

将Clojure映射转换为XML,xml,clojure,Xml,Clojure,我试图找到一个简单的解决方案,将Clojure数据结构转换为XML 这是行不通的 我曾经 data.xml 它能为我创建一个解决方案吗?下面是一个使用clojure.data.xml的示例: (ns tst.tupelo.parse.xml (:use tupelo.core tupelo.test) (:require [clojure.data.xml :as clj-xml])) (def enlive-tree-normalized-nonblank {:tag

我试图找到一个简单的解决方案,将Clojure数据结构转换为XML

这是行不通的

我曾经

data.xml

它能为我创建一个解决方案吗?

下面是一个使用
clojure.data.xml
的示例:

(ns tst.tupelo.parse.xml
  (:use tupelo.core tupelo.test)
  (:require
    [clojure.data.xml :as clj-xml]))

(def enlive-tree-normalized-nonblank
  {:tag     :foo,
   :attrs   {},
   :content [{:tag :name, :attrs {}, :content ["John"]}
             {:tag :address, :attrs {}, :content ["1 hacker way"]}
             {:tag :phone, :attrs {}, :content []}
             {:tag     :school,
              :attrs   {},
              :content [{:tag :name, :attrs {}, :content ["Joe"]}
                        {:tag :state, :attrs {}, :content ["CA"]}
                        {:tag :type, :attrs {}, :content ["FOOBAR"]}]}
             {:tag     :college,
              :attrs   {},
              :content [{:tag :name, :attrs {}, :content ["mit"]}
                        {:tag :address, :attrs {}, :content []}
                        {:tag :state, :attrs {}, :content ["Denial"]}]}]})

(println (clj-xml/indent-str enlive-tree-normalized-nonblank)) 
结果:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
  <name>John</name>
  <address>1 hacker way</address>
  <phone/>
  <school>
    <name>Joe</name>
    <state>CA</state>
    <type>FOOBAR</type>
  </school>
  <college>
    <name>mit</name>
    <address/>
    <state>Denial</state>
  </college>
</foo>

约翰

使用
Clojure.data.XML
tupelo.parse.XML
tupelo.parse.tagsoup
将XML解析为Clojure数据结构(Enlive格式)这正是您需要的:

(:require [clojure.data.xml :as xml])

  (xml/emit-str
   (xml/element
    :response {}
    (map (fn make-node [[f s]]
           (if (map? s)
             (xml/element f {} (map make-node (seq s)))
             (xml/element f {} s)))
         (seq --your-map--))))

根据你的问题不清楚你尝试了什么,所以很难给予建设性的帮助。根据我的经验,clojure.data.xml是有效的。请提供一个输入数据和所需输出的示例,以及您尝试的内容。我一直在Clojurescript项目中试用clojure.data.xml库。在cljs中,似乎有些函数可以工作,有些则不能。例如,emit str似乎可以工作,但indent str不能-I。得到以下错误:使用未声明的变量clojure.data.xml/indent-str