2015-02-11 43 views
1

Clojure和enlive非常棒。在試圖探索Enlive的力量時,我試圖將兩個轉換應用到html頁面。使用enlive在html頁面上進行多重轉換

該HTML頁面有2個區域(div),我想要轉換。有問題的第一個div被克隆〜16次。第二個問題被克隆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頁面div,所以我最終得到了原始的html文件div和我的克隆,並且這種行爲不是bueno。

請幫忙。

非常感謝。

回答

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))) 
+0

謝謝。你的回答以及來自freenode的#Clojure頻道的幫助(感謝noonian!)幫助我意識到我可以簡單地嵌套我的轉換。第一個轉換返回一個節點集,第二個轉換可以使用它作爲其輸入節點集。 voila(= – sova 2015-02-11 23:58:08