Hi,
I am trying to navigate an XML structure using the
clojure.contrib.zip-filter.xml library, but for some strange reason I
receive the following exception:
ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IFn
clojure.zip/node (zip.clj:67)
Here is an example which demonstrates the problem:
(require '[clojure.xml :as x]
'[clojure.zip :as z]
'[clojure.contrib.zip-filter.xml :as zf])
(def myxmlstr
"<Root><Parent><Child><Value>1</Value></Child></Parent></Root>")
(defn parse-str [^String s]
(z/xml-zip (x/parse (java.io.ByteArrayInputStream. (.getBytes s)))))
(zf/xml-> (parse-str myxmlstr) :Parent :Child :Value zf/text)
; returns ("1")
(zf/xml-> (zf/xml-> (parse-str myxmlstr) :Parent :Child :Value) zf/text)
; throws exception
As the exception message reveals the problem comes from the clojure.zip/node
:
(defn node
"Returns the node at loc"
{:added "1.0"}
[loc] (loc 0))
Is there a reason why (loc 0) was used instead of (first loc)? Only
performance? I also noticed that most of the zipper navigation functions in
clojure.zip return PersistentVector, but the xml-> from contrib returns
LazySeq.
I am not sure what could be the solution for this problem, but I definitely
don't expect the above example to throw an exception.
Regards,
Daniel
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en