;; data.xml from https://github.com/clojure/data.xml/
(use '[clojure.data.xml :only [parse-str]])
user=> (let [xml-text "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<foo key=\"val\">1<bar>2</bar>3</foo>"]
(let [root (parse-str xml-text)]
(xml-seq root)))
({:tag :foo,
:attrs {:key "val"},
:content ("1" {:tag :bar, :attrs {}, :content ("2")} "3")}
"1"
{:tag :bar, :attrs {}, :content ("2")}
"2"
"3")
(use '[clojure.xml :only [parse]])
;; clojure.xml/parse requires string to be ByteArrayInputStream
user-> (let [xml-text "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<foo key=\"val\">1<bar>2</bar>3</foo>"]
(let [input (java.io.ByteArrayInputStream.
(.getBytes xml-text))]
(let [root (parse input)]
(xml-seq root))))
({:tag :foo,
:attrs {:key "val"},
:content ("1" {:tag :bar, :attrs {}, :content ("2")} "3")}
"1"
{:tag :bar, :attrs {}, :content ("2")}
"2"
"3")
(defn xml-seq
"A tree seq on the xml elements as per xml/parse"
{:added "1.0"
:static true}
[root]
(tree-seq
(complement string?)
(comp seq :content)
root))
Comments top
No comments for xml-seq. Log in to add a comment.