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 库尝试相关推荐

  1. Clojure入门教程: Clojure – Functional Programming for the JVM中文版

    http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/ api:h ...

  2. Clojure – Functional Programming for the JVM中文版

    Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由xumingming 作者: xumingming | 可以 ...

  3. Clojure入门教程

    Clojure入门教程: Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07 日 由 xumingming 作者: x ...

  4. 优化函数式编程:向 PHP 移植 Clojure 函数

    许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...

  5. 对《Clojure in Action》第二版的书评与作者问答

    由Amit Rahore及Francis Avila撰写,Manning出版的<Clojure in Action>第二版以本质性的.通透的.结构组织良好的方式对Clojure 1.6进行 ...

  6. Clojure 入门

    我将尝试教一些人(主要是Python开发者,在OS X操作系统运行)如何使用Clojure, 因为我觉得目前已经存在的一些教人如何从零开始学习Clojure的文档不尽如人意. 当我自己在几个月前亲身经 ...

  7. Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...

  8. 《Clojure数据分析秘笈》——1.6节从JDBC数据库读取数据

    本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第1章,第1.6节从JDBC数据库读取数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社 ...

  9. 哪个websocket库与Node.js一起使用? [关闭]

    本文翻译自:Which websocket library to use with Node.js? [closed] Currently there is a plethora of websock ...

  10. golang ping go-ping库 简介

    目录 实例 安装 支持的操作系统 Linux Windows go-ping库地址:https://github.com/go-ping/ping 受go-fastping启发,一个简单但功能强大的G ...

最新文章

  1. Ext JS 6正式版的GPL版本下载地址
  2. torch中tensor的普通索引以及index_select()
  3. POJ 2456 Aggressive cows ( 二分 贪心 )
  4. TCPDUMP/LIBPCAP 2-搭建环境
  5. mysql8解决区分大小写问题_球磨机“包球”和“饱磨”分不清?点进来快速区分,解决问题...
  6. python随机生成列表_python 实现快速生成连续、随机字母列表
  7. 命令行怎么关闭自动修复此计算机,cmd重启命令(win10怎么跳过自动修复)
  8. 重温Javascript继承机制
  9. Spring之容中的工厂Bean
  10. 每个python文件就是一个模块、模块的名字就是_Python-模块和包
  11. 计算机分屏解决方案,电脑一机多屏显示解决方案
  12. 2019年安徽省程序设计大赛题解
  13. 用js判断图片地址是否有效
  14. uniform,attribute和varying
  15. 一些广州音字的输入方法
  16. 基于ASP的房屋租售信息管理系统的设计与实现
  17. 首家希尔顿逸林酒店及公寓于深圳启幕
  18. demo1:番茄时钟
  19. 连续10年霸榜第一 程序员「最常用」的编程语言是。。。。
  20. 和流氓软件斗智斗勇这么多天,我总结一下这两天的收获吧

热门文章

  1. thymeleaf使用
  2. html写法影响加载,html加载顺序以及影响页面二次渲染额的因素
  3. 镀铬亮条怎么修复_「日系之光」曾经的亚洲C级车排面,十二代丰田皇冠全面修复日记...
  4. php案例之后台数据显示-- PDO版(php data object)
  5. jQuery基础之jQuery和原生js实现tab选项卡和电影排行榜
  6. javascript及css实现居中效果
  7. MySQL学习(一、概述和表的基本操作)
  8. eclipse、EditPlus等编辑器选中列(块)的方法
  9. 数论——同余和费马小定理
  10. Spring @Aspect、@Before、@After 注解实现 AOP 切面功能