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 一书的作者之一。

参考资料:

Clojure 的 Enlive 库尝试的更多相关文章

  1. clojure.spec库入门学习

    此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. clojure是一门动态类型的语言,在类型检查方面并没有c++/java这种静态类型语言好用,所以多个模块之 ...

  2. 尝试在Mac/iOS上使用tcmalloc库

    概述        TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗内存碎片. ...

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

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

  4. windows下sublime2 clojure环境配置

    最近在看<七周七并发模型>,其中函数式编程使用的是clojure来做说明,所以也想顺便学习一下clojure这种不同的编程方式语言.那么做开发肯定需要开发环境,第一步先下载clojure官 ...

  5. debian下编译libev库

    系统为Linux debian 2.6.32-5-686.这是裸系统,连xwindows都没有.帐户为root,不是的注意一下权限.这里想说明安装过程及出现的问题,故打印的信息较多,以供出现错误的读者 ...

  6. 逻辑编程入门--clojure.core.logic

    此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. 逻辑编程思维: 逻辑编程(逻辑程序设计)是种编程范型,它设置答案须匹配的规则来解决问题,而非设置步骤来 ...

  7. [转] Clojure 快速入门指南:1/3

    [From] http://huangz.iteye.com/blog/1325228 导读 本文的目标是为熟悉 Ruby.Python或者其他类似语言.并对 Lisp 或者函数式编程有一定程度了解的 ...

  8. APK瘦身记,如何实现高达53%的压缩效果

    作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...

  9. ZooKeeper开发手册中文翻译(转)

    本文Github地址:https://github.com/sundiontheway/zookeeper-guide-cn 本文假设你已经具有一定分布式计算的基础知识.你将在第一部分看到以下内容: ...

随机推荐

  1. Shell程序荟萃

    --------------纯输出----------------1.sh #!/bin/sh echo -e "Hello!world!\a\n"exit 0 --------- ...

  2. 更改Apache的首页

    本机Apache的安装过程请见: Apache的首页是由/usr/local/httpd/conf/httpd.conf文件的DocumentRoot决定的. ...## DocumentRoot: ...

  3. Bootstrap3实现的响应式幻灯滑动效果个人作品集/博客网站模板

    ​在线演示 本地下载 如果你想学习如何开发和使用的话,请参考我们免费的课程: Bootstrap3开发滑动风格的博客网站模板

  4. C#.NET常见问题(FAQ)-如何生成release版本的程序,生成debug版本的程序

    除了右击项目在生成中配置改成Release还要在顶部切换成Release     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai1 ...

  5. 【DevOps】为什么我们永远疲于奔命?

    作者:范军 (Frank Fan) 新浪微博:@frankfan7   微信:frankfan7 在[DevOps]谁说大象不能跳舞?一文之后,本文对DevOps的理念作进一步探讨. 最近在读一本书& ...

  6. Java从零开始学十八(抽象类和接口)

    一.什么是抽象类和接口 抽象类.接口与类是一个层次的概念,是java中极其重要的概念. 抽象类是从多个类中抽象出来的公共模板,提供子类均具有的功能. 接口是从多个类中抽象出来的规范,体现的是规范和实现 ...

  7. secureCRT简单设置(学习笔记二)

    菜鸟记录. 一.更改终端类型 选项-全局选项-默认会话-编辑默认设置-终端-仿真-右侧选择类型,下方设置缓冲区大小 二.设置字体和外观 上方窗口外观-右侧设置-字体设置字体类型大小,下面光标可以设置光 ...

  8. JSP实现数据保存(web基础学习笔记四)

    session对象: //服务端设置Session属性 session.setAttribute("user", username); //客户端接收Session Object ...

  9. 算法笔记_196:历届试题 剪格子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|**** ...

  10. plsql 快捷键配置

      plsql 快捷键配置 CreateTime--2018年4月23日17:41:45 Author:Marydon 功能快捷键 预设条目 中文解释 快捷键配置Edit/Undo 撤销 ctrl+z ...