Clojure Enlive-提取原始HTML

Clojure Enlive-提取原始HTML,clojure,enlive,Clojure,Enlive,是否可以使用enlive选择器检索原始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选择器检索原始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>"
在本例中,与原始输入片段不同,enlive已将标记转换为自动关闭标记


我怀疑enlive正在将其转换为一个类似于打嗝的标记列表,这样原始信息就不幸丢失了。

您的怀疑是正确的,enlive在努力为HTML提供一致的抽象时使用了这些信息。我不认为这是它设计提供的功能。

尽管这可能只是无关紧要的,但如果使用append,您可以保留诸如注释之类的信息,否则这些信息将被net.cgrand.enlive-html/html-resource抛出

<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")})