Clojure 的 Enlive 库尝试
Enlive 是一个 Clojure 下的 html 模板引擎。其特别之处在于,它既没有发明任何 html 内嵌的模板 DSL 语法;也不会混杂代码和表现。
一切的一切,都是按下列模型定义的次序执行的:
html 字符串(可以来源于字符串,静态文件,URL, 等等)-> Parse 成 DOM 结构(以 Clojure 的原生数据结构表示)-> Apply 替换变量值的一些转换函数,替换 DOM 指定的元素节点的内容(用 CSS selector 语法指定),返回转换后的 DOM-> 组合成 string.
还有一种比较特别的用法,叫做 snippet. 它允许我们只利用指定的 html 模板的一部分(至于是哪一部分,同样用 CSS selector 指定)。
下面是一段简单的代码,效果是读取博客园首页的源文件,萃取出最新的10条新闻标题打印显示:
(ns enlive-study.core(:gen-class)(:require [net.cgrand.enlive-html :as html]))(defn cnblogs-titles"Get top n news titles of CNBlogs website."[n](let [dom (html/html-resource (java.net.URL. "http://www.cnblogs.com"))title-nodes (html/select dom [:div#headline_block :ul :li :a])titles (->>(map html/text title-nodes)(remove #{"»"})(take n))]titles))(defn -main[& args](doseq [title (cnblogs-titles 10)](println title)))
输出情况:
xxx:enlive-study xxx$ lein run
【编辑推荐】七夕前面试被虐总结
[最多推荐][C#] 软硬结合第二篇——酷我音乐盒的逆天玩法(75/3883)
[最多评论]最近发生的事情...(35/1379)
[新闻头条]程序员媳妇儿注意事项(50/3488)
[推荐新闻]日本没有用户体验(2/1333)
使用 Enlive 的方法是,在项目的 project.clj 文件中加入引用:
:dependencies [[org.clojure/clojure "1.5.1"][enlive "1.1.5"]]
然后用 lein deps 命令自动获取一下依赖即可使用了。
Enlive 这个引擎的做法,由于不需要在 html 代码中嵌入太多模版语法特别的标志,只要是普通的结构良好的 html 文件即可拿来使用。这潜在的会比较有利于前后端开发人员的分工。
Enlive 是 Christophe Grand 的作品。他是 Clojure Programming 一书的作者之一。
参考资料:
- 项目的 Github 地址
- 在 Clojure Cookbook 中的介绍
- 另一个 Tutorial
转载于:https://www.cnblogs.com/thomas888/p/enlive-study.html
Clojure 的 Enlive 库尝试相关推荐
- Clojure入门教程: Clojure – Functional Programming for the JVM中文版
http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/ api:h ...
- Clojure – Functional Programming for the JVM中文版
Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由xumingming 作者: xumingming | 可以 ...
- Clojure入门教程
Clojure入门教程: Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由 xumingming 作者: x ...
- 优化函数式编程:向 PHP 移植 Clojure 函数
许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...
- 对《Clojure in Action》第二版的书评与作者问答
由Amit Rahore及Francis Avila撰写,Manning出版的<Clojure in Action>第二版以本质性的.通透的.结构组织良好的方式对Clojure 1.6进行 ...
- Clojure 入门
我将尝试教一些人(主要是Python开发者,在OS X操作系统运行)如何使用Clojure, 因为我觉得目前已经存在的一些教人如何从零开始学习Clojure的文档不尽如人意. 当我自己在几个月前亲身经 ...
- Clojure 学习入门(18)—— 数据类型
如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...
- 《Clojure数据分析秘笈》——1.6节从JDBC数据库读取数据
本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第1章,第1.6节从JDBC数据库读取数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社 ...
- 哪个websocket库与Node.js一起使用? [关闭]
本文翻译自:Which websocket library to use with Node.js? [closed] Currently there is a plethora of websock ...
- golang ping go-ping库 简介
目录 实例 安装 支持的操作系统 Linux Windows go-ping库地址:https://github.com/go-ping/ping 受go-fastping启发,一个简单但功能强大的G ...
最新文章
- Ext JS 6正式版的GPL版本下载地址
- torch中tensor的普通索引以及index_select()
- POJ 2456 Aggressive cows ( 二分 贪心 )
- TCPDUMP/LIBPCAP 2-搭建环境
- mysql8解决区分大小写问题_球磨机“包球”和“饱磨”分不清?点进来快速区分,解决问题...
- python随机生成列表_python 实现快速生成连续、随机字母列表
- 命令行怎么关闭自动修复此计算机,cmd重启命令(win10怎么跳过自动修复)
- 重温Javascript继承机制
- Spring之容中的工厂Bean
- 每个python文件就是一个模块、模块的名字就是_Python-模块和包
- 计算机分屏解决方案,电脑一机多屏显示解决方案
- 2019年安徽省程序设计大赛题解
- 用js判断图片地址是否有效
- uniform,attribute和varying
- 一些广州音字的输入方法
- 基于ASP的房屋租售信息管理系统的设计与实现
- 首家希尔顿逸林酒店及公寓于深圳启幕
- demo1:番茄时钟
- 连续10年霸榜第一 程序员「最常用」的编程语言是。。。。
- 和流氓软件斗智斗勇这么多天,我总结一下这两天的收获吧
热门文章
- thymeleaf使用
- html写法影响加载,html加载顺序以及影响页面二次渲染额的因素
- 镀铬亮条怎么修复_「日系之光」曾经的亚洲C级车排面,十二代丰田皇冠全面修复日记...
- php案例之后台数据显示-- PDO版(php data object)
- jQuery基础之jQuery和原生js实现tab选项卡和电影排行榜
- javascript及css实现居中效果
- MySQL学习(一、概述和表的基本操作)
- eclipse、EditPlus等编辑器选中列(块)的方法
- 数论——同余和费马小定理
- Spring @Aspect、@Before、@After 注解实现 AOP 切面功能