Suppose you have the following xml to parse in your file:
<high-node>
<low-node>my text</low-node>
</high-node>
you load clojure.xml
:
user=> (use 'clojure.xml)
when parsed, the xml will have the following structure:
{:tag :high-node, :attrs nil, :content [{:tag :low-node, :attrs nil, :content ["my text"]}]}
and then you can seq over the content of the file to get the content of the low-node
:
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :low-node (:tag x))]
(first (:content x)))
("my text")
Similarly, if you wanted to have access to the entire list of information on low-node, you would change the :when
predicate to (= (:high-node (:tag x)))
:
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :high-node (:tag x))]
(first (:content x)))
({:tag :low-node, :attrs nil, :content ["my text"]})
This works because the keywords can operate as functions. See Questions about lists and other stuff in Clojure and Data Structures: Keywords