在Clojure中从XML拉链构建自定义结构的惯用方法
发布时间:2020-12-16 07:48:42 所属栏目:百科 来源:网络整理
导读:比如说,我正在解析RSS源,并希望从中提取信息的子集. (def feed (- "http://..." clojure.zip/xml-zip clojure.xml/parse)) 我可以分别获得链接和标题: (xml- feed :channel :item :link text)(xml- feed :channel :item :title text) 然而,我不知道如何在不
比如说,我正在解析RSS源,并希望从中提取信息的子集.
(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中这样做的方式?
那这个呢?
(reduce (fn [h item] (assoc h (xml1-> item :title text) (xml1-> item :link text))) {} (xml-> feed :channel :item)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |