Si supponga di avere il seguente codice XML per analizzare nel file:
<high-node>
<low-node>my text</low-node>
</high-node>
si carica clojure.xml
:
user=> (use 'clojure.xml)
quando analizzato, il xml avrà la seguente struttura:
{:tag :high-node, :attrs nil, :content [{:tag :low-node, :attrs nil, :content ["my text"]}]}
e quindi è possibile vedere il contenuto del file per ottenere il contenuto di e low-node
:
user=> (for [x (xml-seq
(parse (java.io.File. file)))
:when (= :low-node (:tag x))]
(first (:content x)))
("my text")
Allo stesso modo, se si voleva avere accesso a tutta la lista delle informazioni sul livello basso-nodo, avrebbe cambiato il :when
predicato (= (: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"]})
Questo funziona perché le parole chiave può funzionare come funzioni. Vedere Questions about lists and other stuff in Clojure e Data Structures: Keywords
Gli esempi da zip-query.clj possono essere trovati in xml_test.clj che si trova in src/test/clojure/clojure/data/zip nel repository github per clojure.data.zip –
Funny, ho chiesto questo come bene, e ha ottenuto ottime risposte da alcune delle persone più utili su SO. Tuttavia, anche dopo aver eseguito i dati analizzati risultanti.xml attraverso uno dei suggerimenti, la struttura risultante non ha ancora molto senso per me. Vado a dare un'occhiata al tuo xml-zip, a meno che data.xml non sia il suo successore. – octopusgrabbus