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側へ移動する必要があります。