`
clojurer
  • 浏览: 10702 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

enlive教程

阅读更多
Enlive教程

Enlive是应用基于clojure的转换到html文档的类库,基本过程就是定义一个具有一些规则的模板, 每个规则有一个选择符从要分析的
html文档中选择一些节点 和 应用到选择节点转换为新输出文档的转换指令。

这个教程使用repl会话介绍Enlive的主要特性

先看一个简单的例子,假设有文件 t1.html包含下面内容

<html>
  <body>
    <h1></h1>
  </body>
</html>

首先确认类路径中包括clojure.jar clojure-contrib.jar, enlive/src, tagsoup.jar ,然后设置命名空间为

(ns x (:use net.cgrand.enlive-html))

这行代码加载enlive-html 并设置命名空间为x

   (html-resource "t1.html")

   这行代码 文件中的html内容被分析成节点表示的Hash Map, html-resource载入源从
  文件,类路径资源,URL等。

  在deftemplate中,html源的类型从参数中推断出来,字符串表示文件, Reader表示reader

  定义enlive clojure模板

  下一步定义转换html内容的模板

  (deftemplate t1 "t1.html" [] [:html] (content "wargh"))

  这个模板t1表示转换文件t1.html, 不传递任何参数[], 随后就是转换规则,由多个成对的选择符和指令组成。
在这个例子中,选择html节点且替换它的内容为"wargh"

  t1表示一个函数

转换:
  为了去执行转换,调用模板函数并传递参数
 
   (apply str (t1))  //

为什么使用(apply str ……?

  因为模板函数返回字符串序列,所以需要(apply str [])

  我们可能只想替换hl的内容而不是html的所有内容,所以

  (deftemplate t1 "t1.html" [hdr] [:hl] (content hdr))

更加详细的例子

需要一个更加详细的html文件

<html>
  <body>
    <h1>Sample Header</h1>
    <div id="d1">
      <p class="d"></p>
    </div>
    <div id="d2">
      <ul class="l">
        <li>an item</li>
      </ul>
    </div>
  </body>
</html>

我们的目标是创建一个clojure程序将转换这个html通过:

1:替换sample Header

2: 添加一句话道 div#d1

3: 添加 一些项到 div#d2下的ul中

(deftemplate t2 "t2.html"
    [hdr para-txt li-items]
    [:h1] (content hdr]
    [:div#d1 :p] (content para-txt)
    [:dic :ul.l :li] (clone-for [item li-items] (content item))))

从低级看:

选择符类似于css选择符。

在使用enlive中使用一些低级的API尝试一些东西是非常有用的, at sniptest就是用于这个


转换指令:

   每个规则在左边有一个选择符右边一个转换指令, 转换指令是一个左边选择符选择的节点作为参数,返回节点或者节点序列的函数。
分享到:
评论

相关推荐

    java前后端分离源码-enlive-tutorial:Enlive的简单介绍

    如果您发现本教程在任何方面有用或有帮助,请告诉我。 随意提出添加、更正和改进的建议(甚至更好的 fork repo 并向我发送补丁)。 你需要知道的 不多。 本教程几乎没有假设您接触过 Clojure。 至少您需要安装 Java ...

    kioo, 在 ClojureScript,enlive/enfocus风格的模板,用于对Facebook和Om进行反应.zip

    kioo, 在 ClojureScript,enlive/enfocus风格的模板,用于对Facebook和Om进行反应 kiooKioo将 enlive/enfocus样式模板引入到。 这样可以更好地分离应用程序的视图和逻辑层。这个项目在开发中非常早,并且随着开发...

    enlive-selector-from-css:用于Enlive的Pocket CSS解析器

    user=&gt; ( require '[blx.enlive-selector-from-css :as ecss]) nil user=&gt; ( ecss/translate-css " div.big &gt; ul:last-of-type input.xyz[type=text] " ) [ :div.big :&gt; [ :ul html/last-of-type] [ :input.xyz ( ...

    enlive-reload:自动重新加载活动模板

    Enlive提供了对自动重新加载的支持,但在Mac上不可用,请查看 用法 将此添加到您的依赖项: [com.akolov.enlive-reload "0.2.1"] 在wrap-reload旁边添加用于检查已更改的模板文件的处理程序包装器: (ring....

    friend-ui:朋友使用 enlive 的网络前端

    enlive (v1.1.5) 作为模板库。 朋友 (0.2.1) 如果您希望它看起来不错,也需要 Bootstrap (&gt; 3.0)。 “安装” Friendui 在 Clojars 中可用: 有关的 有一个使用 SQL Korma 作为后端的实现: : 。 它使用JDBC; ...

    endive:当Enlive在花园中遇到PostCSS时会发生什么

    语法和术语与Enlive非常相似。 无论如何,这就是主意。 大多数事情都可以运行,但这仍然是非常有效的alpha软件。 安装 要安装,请将以下依赖项添加到您的project.clj文件中: 用法 要开始使用Endive,需要endive....

    tutorial-clj-webapp:Clojure Web应用程序入门教程

    2. **Enlive**:Enlive是Clojure的一个强大的HTML模板库,它提供了选择器和转换功能,类似于CSS,用于操作和构建HTML文档。 五、部署和服务器 1. **Jetty**:Clojure Web应用通常与Jetty服务器一起使用,因为Jetty...

    laser:HTML 转换模板,适合做那种事情的人

    过时的激光警告:此项目不再维护当我开始 Laser 时,Enlive 已经很多、很多、很多个月没有被提交,而且拉取请求实际上一年或更长时间都没有被关注。 我的印象是该项目已经开始结束,因此将 Laser 开发为一个可维护的...

    clojure网站:clojure.org网站

    Clojure.org 网站是 Clojure 语言的官方在线资源中心,为开发者提供全面的文档、教程和社区资源。Clojure 是一种基于 Lisp 传统的静态类型编程语言,设计目标是运行在 Java 虚拟机(JVM)上,同时支持函数式、命令式...

    enliven:接下来活着

    警告非常湿的油漆Enliven是Enlive的继任者甚至字典也这样说: 活着:要活着(肥胖) Enliven也代表Enlive N(ext)。不绑定HTML 当前, enliven.text可以对纯文本( enliven.text )和html( enliven.html )进行...

    green-recipes:一个用 Clojure 和 ClojureScript 编写的网站

    一个用 Clojure 和 ClojureScript 编写的网站,使用 Enlive 作为模板,使用 Postgresql 作为数据存储。 主要功能 按成分过滤食谱 按食谱类别对食谱进行分组 用法 有必要创建名为 zelenerecepty 的数据库。 在运行...

    mirador:实时重新加载资源更改(html,css,javascript等)以进行clojurering

    也可以结合Enlive模板中的更改 用法 添加到依赖项: [com.akolov.mirador " 0.2.1 " ] 添加环形中间件以监视更改。 例如,当一个有效的模板或代码段发生变化时做出React: watch-reload { :watcher ( watcher-...

    hbs:由handlebars.java制作clojure模板

    不要再在 clojure Web 开发书籍上谈论 enlive 或 hiccup。 永远不要用 HTML 破坏你的 Clojure 代码 永远不要用 Clojure 破坏你的 HTML 代码 没有重用机制的模板是狗屎 没有定制的模板不过是狗屎 有哪些车把? 将...

    alfa-mark:在 clojure 和 common lisp 中对几个 webdev 工具进行基准测试

    模板:selmer、hiccup、enlive、laser 数据库:couchdb (clutch)、couchbase (couchbase-clj)、mysql (korma)、redis (carmine) 常见 Lisp 设置:服务器 restas (hunchentoot)、wookie、模板 cl-who 和 redis ...

    fx-clj:JavaFX的Clojure库

    提供一个API,用于使用选择器(类似于enlive)修改节点,以与FXML资源进行交互允许通过代码设置JavaFX CSS并与garden CSS库集成i18n的辅助功能提供数据绑定到React性原子,游标和表达式(通过 )。快速开始

    七周七Web开发框架1

    第三天,将了解Ring的中间件和Enlive库,以及如何进行测试。 Webmachine是基于Erlang的HTTP服务器,强调了对HTTP协议的正确处理。第一天,读者会学习HTTP请求状态机的概念,以及如何使用资源函数来处理请求。后续的...

    ganelon:Ganelon微框架通过引入用于基于AJAX的页面内容服务器端管理JavaScript薄层,为Clojure带来了动态Web应用程序的快速开发。

    我还准备了另一个版本,该版本工作得更好,甚至支持Enlive(并且没有带来很多要求),但是该代码不是公开的,因为我需要花费时间/动力来对其进行记录。 在每个人都需要Reagent / Om的情况下,最后一部分特别困难,...

    organa:使用Emacs Org Mode和Clojure进行更多发布

    过去,我已经编写了一些(不完整的)组织模式解析器(是以前的尝试),但是使用Hiccup或Enlive在Clojure中操纵HTML容易得多。 当前代码依赖于首先将组织模式导出为HTML,进行解析,然后根据需要修改解析树。 工作...

    Sandbox:测试和学习 Clojure

    - **官方文档**:Clojure 和 ClojureScript 的官方文档是学习的好起点,提供了详尽的语言参考和教程。 - **Leiningen**:Clojure 的项目管理和构建工具,包含了大量的库和插件,方便构建和管理Clojure项目。 - **...

    clojure-must-watch-源码.rar

    通过研究源码,可以了解到一些流行的社区库,如Ring(web框架)、Compojure(路由库)和Enlive(HTML模板库)等。 总之,这个压缩包"clojure-must-watch-源码.rar"可能包含了一个Clojure项目或一系列示例,用于演示...

Global site tag (gtag.js) - Google Analytics