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")})})}
答案 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)。