zoukankan      html  css  js  c++  java
  • 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 一书的作者之一。

    参考资料:

  • 相关阅读:
    CSS标题省略号带后缀名称
    vue post下载
    PiNetwork – 国外手机挖矿,目前国外热度很高
    iview table expand 单击当前行控制
    iview 开关变化时控制状态的变更
    CSS伪元素before,after制作左右横线中间文字效果
    idea 修改代码自动编译
    如何获取微信公众号的关注链接?
    震惊,微信小程序可以设置网络字体!真香
    小程序字体大小怎么设置,小程序修改字体样式方法
  • 原文地址:https://www.cnblogs.com/thomas888/p/enlive-study.html
Copyright © 2011-2022 走看看