Clojure:
XMLの扱い方

方法:

Clojureはclojure.data.xmlライブラリをXMLの解析と出力に提供します。まず、いくつかのXMLを解析してみましょう:

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

(let [content "<root><foo>bar</foo><foo>baz</foo></root>"
      parsed (xml/parse-str content)] ; XML文字列を解析
  (println parsed))

出力:

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

Clojure構造体からXMLを出力するには:

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

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

出力:

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

ディープダイブ

XMLは90年代後半から存在し、SGMLの単純化されたサブセットとしてWebデータ用に開始されました。SOAPやXHTMLなどの技術とともに使用が爆発的に増えましたが、軽量でシンプルであるためJSONからの競合もあります。

ClojureのXMLへのアプローチは、関数型でデータ中心のままで、言語の理念に忠実です。clojure.data.xmlは選択肢の一つに過ぎず、基本的なニーズにはclojure.xmlを、JavaインタロップにはJAXBやDOM4Jなどの主要なツールを使用できます。

非常に大きなXMLドキュメントを扱う場合、パフォーマンスとメモリのオーバーヘッドが重くなる点に注意してください。ストリーミングパーサーのStAXが役立つかもしれませんが、それにはJava側へ移動する必要があります。

参照