Clojure:
XML 다루기

사용법:

Clojure는 XML 파싱과 생성을 위해 clojure.data.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의 단순화된 하위 집합으로 시작했으며, 웹 데이터를 위해 생겼습니다. SOAP과 XHTML과 같은 기술의 사용이 폭발적으로 증가하며 사용량이 급증했지만, 가벼움과 단순함을 선호하는 JSON으로부터 경쟁을 받게 되었습니다.

Clojure에서의 XML 접근은 기능적이고 데이터 중심적이며, 언어의 정신을 유지합니다. clojure.data.xml은 단지 하나의 옵션이며, 기본적인 요구 사항에는 clojure.xml을 사용할 수 있고, Java 상호 운용성에는 JAXB나 DOM4J와 같은 강력한 도구를 사용할 수 있습니다.

매우 큰 XML 문서를 다룰 때의 성능과 메모리 오버헤드는 상당할 수 있습니다. StAX와 같은 스트리밍 파서가 도움이 될 수 있지만, 이를 위해서는 Java 영역으로 들어가야 합니다.

참고 자료