我想解析HTML文件/字符串并修改某些元素,然后使用Clojure返回修改后的HTML。
我有三个主要目标:
我可以获取Document,并使用Jsoup选择器来获取元素。问题在于,当我遍历集合并进行更改时,原始文档不会反映出更改。
(ns email.test
(:import [org.jsoup Jsoup]
[org.jsoup.nodes Document]
[org.jsoup.select Elements]))
(def html-string "
<html>
<body>
<div>
<a href='http://test.com'>Test 1</a>
<a href='http://test.com'>Test 2</a>
<a href='http://test.com'>Test 3</a>
<img alt='first' src='http://test.com/img/one.jpg'/>
<img alt='second' src='http://test.com/img/two.jpg'/>
</div>
</body>
</html>")
(defn get-html-doc
"Take HTML string and return Jsoup Document"
[html]
(Jsoup/parseBodyFragment html)
)
(defn prefix-html-links
"Parse HTML Document and replace links prefixing the current link with another"
[selector prefix html]
(let [links (.select html selector)]
(for [l links]
(let [orig (.attr l "href")]
(.attr l "href" (str prefix orig))
)
))
html
)
(prefix-html-links "a[href]" "http://example.com?s=" (get-html-doc html-string))
编辑:您需要使用doseq
而不是for
才能运行,