2

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")})})}
4

1 に答える 1

1

一般に、defrecords はマップとして操作できます。

例えば:

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

これで、defrecord タイプの Dog が定義されました。

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

明らかに、マップ上で操作するために誰もが知っていて気に入っている「キー」機能は正常に機能します。

しかし、さらに進んでみると、悲しいかな、defrecord は本当に map であることがわかります。

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

では、なぜ単純な地図をめぐって大騒ぎするのでしょうか。xml は明確に定義された構造を持っているため、返されるすべての defrecord にいくつかの保証されたキーを含めることができるのは理にかなっています。特に、defrecord 要素にはそれぞれ「:tag、:attrs、および :content」があります。確認のために、これらの一定の defrecord 属性は、clojure を使用して xml を解析するオンライン チュートリアル (つまり、http://www.gettingclojure.com/cookbook:xml-html ) に常に存在することに注意してください。

于 2012-06-30T05:11:54.847 に答える