将Clojure映射转换为XML
我试图找到一个简单的解决方案,将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
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