8
說,我解析RSS提要,並希望從中提取一部分信息。從Clojure中的XML拉鍊建立自定義結構的習慣方式
(def feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse))
我能得到的鏈接和標題分別:
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)
但是我想不通的方式在同一時間提取它們沒有穿過拉鍊不止一次,例如
(let [feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse)]
(zipmap
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)))
...或其變體中,涉及多個序列映射到該遞增地建立與,比如說,assoc
地圖的功能。
不僅我必須遍歷序列多次,序列也有不同的狀態,所以元素必須「對齊」,可以這麼說。也就是說,在RSS比較複雜的情況下,子元素可能在特定元素中缺失,導致序列之一縮短一個(沒有空位)。所以結果可能實際上是不正確的。
有沒有更好的方法呢,或者說,它實際上是的方式,你在Clojure中做到了嗎?