2013-09-20 1 views
9

Я пытаюсь использовать Clojure и Enlive для извлечения содержимого тега p html при условии, что один из атрибутов имеет значения, которые я обозначил. Что-то вроде этогоEnlive - Извлечь содержимое тега, если атрибуту присвоено значение

<p itemprop="description"> Some content I want to extract </p> 

Так что я хочу, чтобы получить Some content I want to extract если itemprop="description".

Я очень новичок в Clojure, поэтому помощь будет отличной.

ответ

10

Чтобы получить текстовое содержимое любого узла с определенным атрибутом, селектор будет выглядеть следующим образом:

(require '[net.cgrand.enlive-html :as e]) 

[(e/attr= :itemprop "description") e/text-node] 

Если содержимое содержит смесь текста и тегов, и вы хотите сохранить как из них вы должны использовать net.cgrand.enlive-html/any-node вместо net.cgrand.enlive-html/text-node.

Вы можете протестировать его со следующим:

(require '[net.cgrand.enlive-html :as e]) 

(def data "<p itemprop=\"description\"> Some content I want to extract </p>") 

(e/select-nodes* (e/html-snippet data) 
       [(e/attr= :itemprop "description") e/text-node]) 
    ;=> (" Some content I want to extract ") 
+0

Работает отлично. Благодарю. –