Clojure:
Trabalhando com XML

Como fazer:

Clojure oferece a biblioteca clojure.data.xml para análise (parsing) e emissão de XML. Primeiro, vamos analisar algum XML:

(require '[clojure.data.xml :as xml])

(let [conteúdo "<root><foo>bar</foo><foo>baz</foo></root>"
      analisado (xml/parse-str conteúdo)] ; Analisa string XML
  (println analisado))

Saída:

Element{:tag :root, :attrs {}, :content (Element{:tag :foo, :attrs {}, :content ("bar")} Element{:tag :foo, :attrs {}, :content ("baz")})}

Para emitir XML a partir de estruturas Clojure:

(def my-xml (xml/element :root {}
                          (xml/element :foo {} "bar")
                          (xml/element :foo {} "baz")))

(println (xml/emit-str my-xml))

Saída:

<root><foo>bar</foo><foo>baz</foo></root>

Aprofundamento

XML já tem seu tempo, começando no final dos anos 90 como um subconjunto simplificado do SGML, destinado a dados na web. Seu uso explodiu com tecnologias como SOAP e XHTML, mas recebeu um pouco de concorrência do JSON, que é preferido por sua leveza e simplicidade.

A abordagem de Clojure para XML mantém-se funcional e centrada nos dados, fiel ao ethos da linguagem. clojure.data.xml é apenas uma opção; você tem clojure.xml para necessidades básicas, e para interoperação com Java, você pode contar com pesos-pesados como JAXB ou DOM4J.

Tenha em mente que o desempenho e uso de memória ao lidar com documentos XML muito grandes pode ser elevado. Analisadores de fluxo como o StAX podem ajudar, mas você precisará recorrer ao Java para eles.

Veja Também