xml-seq

added
1.0

ns
clojure.core

type
function

(xml-seq root)

A tree seq on the xml elements as per xml/parse

                ;; 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.data.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")