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 一书的作者之一。
参考资料:
Clojure 的 Enlive 库尝试的更多相关文章
- clojure.spec库入门学习
此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. clojure是一门动态类型的语言,在类型检查方面并没有c++/java这种静态类型语言好用,所以多个模块之 ...
- 尝试在Mac/iOS上使用tcmalloc库
概述 TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗内存碎片. ...
- 优化函数式编程:向 PHP 移植 Clojure 函数
许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...
- windows下sublime2 clojure环境配置
最近在看<七周七并发模型>,其中函数式编程使用的是clojure来做说明,所以也想顺便学习一下clojure这种不同的编程方式语言.那么做开发肯定需要开发环境,第一步先下载clojure官 ...
- debian下编译libev库
系统为Linux debian 2.6.32-5-686.这是裸系统,连xwindows都没有.帐户为root,不是的注意一下权限.这里想说明安装过程及出现的问题,故打印的信息较多,以供出现错误的读者 ...
- 逻辑编程入门--clojure.core.logic
此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. 逻辑编程思维: 逻辑编程(逻辑程序设计)是种编程范型,它设置答案须匹配的规则来解决问题,而非设置步骤来 ...
- [转] Clojure 快速入门指南:1/3
[From] http://huangz.iteye.com/blog/1325228 导读 本文的目标是为熟悉 Ruby.Python或者其他类似语言.并对 Lisp 或者函数式编程有一定程度了解的 ...
- APK瘦身记,如何实现高达53%的压缩效果
作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...
- ZooKeeper开发手册中文翻译(转)
本文Github地址:https://github.com/sundiontheway/zookeeper-guide-cn 本文假设你已经具有一定分布式计算的基础知识.你将在第一部分看到以下内容: ...
随机推荐
- netdata的安装与使用
具体的netdata介绍请参照GIT:https://github.com/firehol/netdata/wiki 以下只介绍centos下的netdata的安装与使用: 1.安装Netdata需要 ...
- linux ---jenkins的安装与配置
linux下的jenkins的安装: Jenkins 下载网址: http://jenkins-ci.org/ 1.准备:JDK环境,tomcat环境,maven环境,jenkins.war包 2.在 ...
- iptables与SELinux
iptables: 开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L Chain INPUT (policy ...
- redis sentinel(哨兵机制)部署(Windows下实现)
另外参考:http://www.cnblogs.com/LiZhiW/p/4851631.html 一.准备条件 1.操作系统:win7 2.redis版本:redis-2.8.19 二.下载Redi ...
- Eclipse 之使用技巧积累(一)
1.代码缩进 选中缩进代码,然后点击“Tab”键增加缩进. 2.代码退格 选中退格代码,然后按住“Shift”键,再点击“Tab”键退格. 3.无格式代码格式化 (1)默认快捷键:Ctrl + Shi ...
- PHP高级教程-Cookie
PHP Cookie cookie 常用于识别用户. Cookie 是什么? cookie 常用于识别用户.cookie 是一种服务器留在用户计算机上的小文件.每当同一台计算机通过浏览器请求页面时,这 ...
- jsoup抓取豆瓣美女
package com.huowolf; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOu ...
- 算法笔记_196:历届试题 剪格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|**** ...
- 深入理解Object提供的阻塞和唤醒API
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器AbstractQueuedSynchronizer的源码实现,再结合很久之前看过的一篇关于Object提供的 ...
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...