如何从描述为defrecords的数据推断出defrecord的格式?

时间:2012-06-29 13:37:59

标签: clojure xml-parsing

data.xml / parse的文档说

数据作为defrecords返回,可以使用普通的clojure数据结构函数进行操作。

可以手动或以编程方式推断出那些defrecords的结构,如果是,如何推断?

以下是文档压缩的示例:

(let [input-xml (java.io.StringReader. 
                 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
                 <foo><bar><baz>The baz value</baz></bar></foo>")]
  (parse input-xml))

#clojure.data.xml.Element{:tag :foo,
                      :attrs {},
                      :content 
(
#clojure.data.xml.Element{:tag :bar, 

:attrs {},
:content (#clojure.data.xml.Element{:tag :baz,
         :attrs {},
         :content ("The baz value")})})}

1 个答案:

答案 0 :(得分:1)

一般来说,defrecords可以作为地图进行操作,因为这基本上就是它们。

例如:

problems.core=> (defrecord Dog [name collarsize])

现在,我们已经定义了一个defrecord类型,一个狗。

problems.core=> (keys (Dog. "laly" 1))           
(:name :collarsize)

很明显,我们都知道并喜欢在地图上操作的“按键”功能运行良好。

但是为了更进一步,我们发现一个defrecord,唉,确实是一张地图:

problems.core=> (map? (Dog. "laly" 1))           
true

那么 - 为什么所有这一切都在简单的地图上大惊小怪?因为,因为xml具有明确定义的结构,所以我们可以在返回的每个defrecord中都有一些gauranteed键。特别是,每个defrecord元素都有“:tag,:attrs和:content”。要确认,您可以注意到这些常量defrecord属性始终存在于使用clojure解析xml的在线教程中(即http://www.gettingclojure.com/cookbook:xml-html)。