From 63c610b1857b837b63acc514665b8c7e3f0b20cd Mon Sep 17 00:00:00 2001 From: Ryan Senior Date: Tue, 11 Dec 2012 21:12:52 -0600 Subject: [PATCH] added cdata support for sexp-as-element (DXML-11) --- src/main/clojure/clojure/data/xml.clj | 7 ++++++- .../clojure/clojure/data/xml/test_sexp.clj | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/clojure/clojure/data/xml.clj b/src/main/clojure/clojure/data/xml.clj index a2a1472..6568f34 100644 --- a/src/main/clojure/clojure/data/xml.clj +++ b/src/main/clojure/clojure/data/xml.clj @@ -178,6 +178,11 @@ (defprotocol AsElements (as-elements [expr] "Return a seq of elements represented by an expression.")) +(defn sexp-element [tag attrs child] + (cond + (= :-cdata tag) (CData. (first child)) + :else (Element. tag attrs (mapcat as-elements child)))) + (extend-protocol AsElements clojure.lang.IPersistentVector (as-elements [v] @@ -187,7 +192,7 @@ [k (str v)])) after-attrs] [{} content])] - [(Element. tag attrs (mapcat as-elements content))])) + [(sexp-element tag attrs content)])) clojure.lang.ISeq (as-elements [s] diff --git a/src/test/clojure/clojure/data/xml/test_sexp.clj b/src/test/clojure/clojure/data/xml/test_sexp.clj index 6f23a6f..3bfa848 100644 --- a/src/test/clojure/clojure/data/xml/test_sexp.clj +++ b/src/test/clojure/clojure/data/xml/test_sexp.clj @@ -25,3 +25,21 @@ (is (= (sexps-as-fragment input) (map sexp-as-element input))) (is (thrown? Exception (sexp-as-element input))))) + +(deftest with-cdata + (let [xml-input (element :tag {:attr "value"} + (element :body {} (cdata "not parsed