I have been fooling around with clojure.contrib.zip-filter.xml, and
feel like I'm stuck on something that should be simple.
Below is code showing what I'm talking about. I'm trying to parse some
simple xml, but can't quite get what I'm after.
(ns foo
(:require [clojure.xml :as xml])
(:require [clojure.zip :as zip])
(:require [clojure.contrib.zip-filter.xml :as zf]))
;; read and parse xml string
(defn parse-str [s]
(zip/xml-zip (xml/parse (new org.xml.sax.InputSource
(new java.io.StringReader s)))))
;; illustrative xml string
(def incidents (parse-str
"<incidents>
<ticket>
<customer>Alice</customer>
<item>foo</item>
</ticket>
<ticket>
<customer>Bob</customer>
<item>bar</item>
<item>baz</item>
</ticket>
</incidents>"))
(defn customers [xml]
(zf/xml-> xml :ticket :customer zf/text))
(defn items [xml]
(zf/xml-> xml :ticket :item zf/text))
(defn tickets [xml] ;; not quite right
(zf/xml-> xml :ticket zf/text))
;;
;;(items incidents) yields ("foo" "bar" "baz")
;;(customers incidents) yields ("Alice" "Bob")
;;(tickets incidents) yields ("Alicefoo" "Bobbarbaz")
;;
What I'd like to get from 'tickets' is something like ( ["Alice"
["foo"]] ["Bob" ["bar" "baz"]]), that is, output that ties incidents
to customers. So far it has eluded me.
If you can offer any suggestions, I'd sure appreciate it.
David
--
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