说,我正在解析RSS提要,并希望从中提取信息的子集.
(def feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse))
Run Code Online (Sandbox Code Playgroud)
我可以分别获得链接和标题:
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何在不经过拉链的情况下同时提取它们的方法,例如
(let [feed (-> "http://..." clojure.zip/xml-zip clojure.xml/parse)]
(zipmap
(xml-> feed :channel :item :link text)
(xml-> feed :channel :item :title text)))
Run Code Online (Sandbox Code Playgroud)
......或其变体,包括将多个序列映射到一个函数,该函数例如用增量方式构建一个映射assoc.
不仅我必须多次遍历序列,序列也有不同的状态,所以元素必须"对齐",可以这么说.也就是说,在比RSS更复杂的情况下,特定元素中可能缺少子元素,使得一个序列缩短一个(没有间隙).所以结果可能实际上是不正确的.
有没有更好的办法或者是吧,其实,在你做Clojure中呢?
那这个呢?
(reduce (fn [h item]
(assoc h (xml1-> item :title text)
(xml1-> item :link text)))
{} (xml-> feed :channel :item))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |