在Clojure中从XML拉链构建自定义结构的惯用方法

比如说,我正在解析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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇