Clojure:
Lavorare con XML
Come fare:
Clojure offre la libreria clojure.data.xml
per il parsing e l’emissione di XML. Prima, analizziamo un po’ di XML:
(require '[clojure.data.xml :as xml])
(let [content "<root><foo>bar</foo><foo>baz</foo></root>"
parsed (xml/parse-str content)] ; Analizza la stringa XML
(println parsed))
Output:
Element{:tag :root, :attrs {}, :content (Element{:tag :foo, :attrs {}, :content ("bar")} Element{:tag :foo, :attrs {}, :content ("baz")})}
Per emettere XML da strutture Clojure:
(def my-xml (xml/element :root {}
(xml/element :foo {} "bar")
(xml/element :foo {} "baz")))
(println (xml/emit-str my-xml))
Output:
<root><foo>bar</foo><foo>baz</foo></root>
Approfondimento
XML è presente da un bel po’, avviato alla fine degli anni ‘90 come un sottogruppo semplificato di SGML, destinato ai dati web. Il suo uso è esploso con tecnologie come SOAP e XHTML ma ha ottenuto un po’ di concorrenza da JSON, che è preferito per la sua leggerezza e semplicità.
L’approccio di Clojure all’XML lo mantiene funzionale e centrato sui dati, rimanendo fedele all’etos del linguaggio. clojure.data.xml
è semplicemente un’opzione; hai clojure.xml
per le esigenze di base e, per l’interoperabilità con Java, puoi affidarti a pesi massimi come JAXB o DOM4J.
Tieni presente che le prestazioni e il sovraccarico di memoria quando si trattano documenti XML molto grandi possono essere onerosi. I parser in streaming come StAX possono aiutare, ma dovrai passare al mondo Java per utilizzarli.