Enlive - извлекать оригинальный HTML

Можно ли получить исходный HTML (с его причудами и форматированием) с помощью оживляющих селекторов?

(def data "<div class=\"foo\"><p>some text <br> some more text</p></div>") 
(apply str 
    (enlive/emit* (enlive/select (enlive/html-snippet data) 
                                 [:.foo :> enlive/any-node])))

=> "<p>some text <br /> some more text</p>"

В этом примере, liveive трансформировал <br> тег в самозакрывающийся тег, в отличие от исходного входного фрагмента.

Я подозреваю, что воплощение превращает его в похожий на сбой список тегов, так что исходная информация, к сожалению, теряется.

2 ответа

Решение

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

Хотя, возможно, это только косвенно связано, если вы используете "добавление", вы можете сохранить информацию (например, комментарии), которая иначе была бы выброшена net.cgrand.enlive-html / html-resource

https://github.com/cgrand/enlive/wiki/Table-and-Layout-Tutorial%2C-Part-3%3A-Simple-Transformations

<div id="wrapper">
   <!--body-->
</div>

jcrit.server=> (pprint 
             (transform layout [:#wrapper] 
                        (append page-content)))
({:tag :html,
     {:tag :div,
      :attrs {:id "wrapper"},
      :content
      ("\n       "
       {:type :comment, :data "body"}   ; <<== Still there.
       "\n    "
       {:tag :p, :content ("Hi, mom!")})}
     "\n")}
   "\n\n")})
Другие вопросы по тегам