Как получить значение атрибута href, используя ive

Я новичок в Clojure и живой.

У меня есть HTML, как это

<SPAN CLASS="f10"><A HREF="value1" title="...." TARGET="detail">....</A></SPAN></DIV><DIV CLASS="p5"><SPAN CLASS="f10"><A HREF="value2" title="..." TARGET="detail">.....</A></SPAN>

Я пробовал это

(html / select (fetch-url base-url) [: span.f10 [: a (html / attr?: href)]])))

но это возвращает

({:tag :a,
  :attrs
  {:target "detail",
   :title
   "...",
   :href
   "value1"},
  :content ("....")}
 {:tag :a,
  :attrs
  {:target "detail",
   :title
   "....",
   :href
   "value2"},
  :content
  ("....")}

То, что я хочу, это просто значение 1 и значение 2 на выходе. Как я могу это сделать?

2 ответа

Решение

select возвращает совпадающие узлы, но вам все равно нужно извлечь их href атрибутов. Для этого вы можете использовать attr-values:

(mapcat #(html/attr-values % :href)
      (html/select (html/html-resource "sample.html") [:span.f10 (html/attr? :href)]))

Я использую эту маленькую функцию, потому что Enlive attr функции не возвращают значения. Вы просто ходите по хешу, чтобы получить значение.

user=> (def data {:tag :a, :attrs {:target "detail", :title "...", :href "value1"}})
#'user/data

user=> (defn- get-attr [node attr]
       #_=>   (some-> node :attrs attr))
#'user/get-attr

user=> (get-attr data :href)
"value1"
Другие вопросы по тегам