【发布时间】:2018-05-02 22:11:16
【问题描述】:
我想获取一个获取的 html 页面并从中创建一个 enlive 模板
(-> (fetch) ; function returns clj-http.client/get
(:body)
(clojure.java.io/reader)
(html/html-resource) ; enlive
(swap-header)
(swap-body-tag))
我的两个交换 fns 是这样的
(defn swap-header [body]
(as-> (html/deftemplate temp body [content] [:body] (html/content content)) x
(apply str (x "testing"))))
(defn swap-body-tag [body]
(as-> (html/deftemplate temp body [disabled] [:body] (html/set-attr :disabled disabled)) x
(apply str (x "yo-123"))))
所以难题是我可以从获取返回管道中注释掉这两个交换中的任何一个,并且它工作正常。尝试(以任何一种顺序)都会失败。我相信应用模板的结果是错误的格式,无法从中制作另一个模板,但无法完全到达我需要的位置。
链接它们时我得到的错误是HTML resource not found.
修改为使用更多填写的代码并删除 comp
更新 我从https://stackoverflow.com/a/38284236/736368 复制了一个函数,以使字符串成为阅读器。这似乎让这个工作。从性能的角度来看,这似乎是一种好方法吗?
(->> ctx
(:request)
(fetch)
(:body)
(clojure.java.io/reader)
(html/html-resource)
(swap-body-tag)
(apply str) ; new
(string->stream) ; new
(swap-header))
【问题讨论】:
-
通过
->和->>做同样的事情也很常见;比如(-> parsed clean-header clean-footer swap-urls etc) -
您能发布一些示例数据吗?这将使您更容易看到您正在尝试做什么以及哪里出了问题。