假如我正在解析一个 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中唯一的方法?