【问题标题】:Multiple transforms on an html page using enlive使用 enlive 在 html 页面上进行多次转换
【发布时间】:2015-02-11 15:57:13
【问题描述】:

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 页面 div 被保留,因此我最终将原始 html 文件 div 与我的克隆一起获得,并且这种行为是不可取的。

请帮忙。

非常感谢。

【问题讨论】:

    标签: clojure enlive


    【解决方案1】:

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

    【讨论】:

    • 谢谢。您的回答和 freenode 上#Clojure 频道的一些帮助(感谢 noonian!)帮助我意识到我可以简单地嵌套我的转换。第一个转换返回一个节点集,第二个转换可以将其用作其输入节点集。瞧(=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2020-05-08
    • 2018-10-27
    • 2013-04-10
    • 2012-09-12
    相关资源
    最近更新 更多