使用enlive在html页面上进行多次转换

时间:2015-02-11 04:27:12

标签: clojure enlive

Clojure和enlive很棒。在试图了解Enlive的力量时,我试图将两个转换应用到html页面。

HTML页面有2个我想要转换的区域(div)。有问题的第一个div被克隆了~16次。有问题的第二个div被克隆了5次。应该覆盖原始div(来自html文件)或根本不显示。

Enlive有惯用的方法

(apply str (enlive-html/emit* ze-contant-transferm))

这对于一次转换非常有效。

然而,我想对页面应用两个变换,所以我尝试了类似的东西:

(str
  (apply str (enlive-html/emit* ze-first-wan))
  (apply str (enlive-html/emit* ze-secand-wan)))
单独完成的转换完全符合我的意愿:它们会占用原始HTML并显示我用于填充信息的克隆。

然而,以这种方式一起完成,原始的html-page div被保留,所以我最终得到了原始的html文件div和我的克隆,并且这种行为不是bueno。

请帮忙。

由于-A-备受一个。

1 个答案:

答案 0 :(得分:3)

Enlive-html为此提供了do->功能。

(defn do->
 "Chains (composes) several transformations. Applies functions from left to right."
 [& fns]
  #(reduce (fn [nodes f] (flatmap f nodes)) (as-nodes %) fns))

您可以使用以下内容:

 (apply str (enlive-html/emit* (enlive-html/do-> ze-first-wan ze-second-wan)))