On Wed, Dec 2, 2009 at 11:29 AM, Dennis <shr3ks...@gmail.com> wrote:
> Sean,
> I probably did not make it clear, but I am using parse.  The second line of
> handle-xml function in my original E-Mail has the parse in it.  I then
> iterate over the xml-seq.

Are you familiar with 'zippers'? There is a zipper for xml-seqs in contrib:

http://richhickey.github.com/clojure-contrib/zip-filter-api.html

This might afford you a better way to navigate your XML documents. I
don't know of any how-to docs on xml zippers, but a quick google found
this blog article:

http://netzhansa.blogspot.com/2008/10/trying-clojure.html

Best,
Graham

> I am also using:
> (ns zod
>   (:require [clojure.contrib.http.agent :as http])
>   (:import (java.util Timer TimerTask))
>   (:use [clojure.xml :only (parse)]))
> -- Dennis
> On Wed, Dec 2, 2009 at 10:23 AM, Sean Devlin <francoisdev...@gmail.com>
> wrote:
>>
>> Try the clojure.xml namespace.  There's a funciton parse in there that
>> should help.
>>
>> On Dec 2, 10:51 am, Dennis <shr3ks...@gmail.com> wrote:
>> > Howdy,
>> >
>> > Being new to clojure, I am having a difficult time parsing XML in an
>> > elegant
>> > manner.  I am pulling metric information from a ganglia server as XML
>> > and
>> > then parsing it.  The below function works but it makes me feel icky.  I
>> > was
>> > hoping for some tips.
>> >
>> > The "dc" variable contains a map with some data center information (not
>> > really interesting), and the "stream" variable comes from http.agent.
>> >
>> > (defn handle-xml [dc stream]
>> >   (let [xml-out (xml-seq (parse (http/stream stream)))]
>> >     (doseq [x xml-out]
>> >       (doseq [y (:content x)]
>> > (doseq [z (:content y)]
>> >   (doseq [a (:content z)]
>> >     (println (:dc dc) (:NAME (:attrs z)) (:NAME (:attrs a)) (:VAL
>> > (:attrs
>> > a)) (:TN (:attrs a)))))))))
>> >
>> > The XML is of the form:
>> > ganglia
>> >   multiple clusters
>> >     multiple hosts
>> >       multiple metrics
>> >
>> > Example of the XML:
>> > <GANGLIA_XML VERSION="3.0.7" SOURCE="gmond">
>> > <CLUSTER NAME="cluster.example.com" LOCALTIME="1258396022"
>> > OWNER="unspecified" LATLONG="unspecified" URL="unspecified">
>> > <HOST NAME="server.example.com" IP="127.0.0.1" REPORTED="1258396019"
>> > TN="3"
>> > TMAX="20" DMAX="86400" LOCATION="unspe
>> > cified" GMOND_STARTED="1255757736">
>> > <METRIC NAME="disk_total" VAL="1320.124" TYPE="double" UNITS="GB"
>> > TN="6684"
>> > TMAX="1200" DMAX="0" SLOPE="both" SOURCE="gmond"/>
>> > <METRIC NAME="cpu_speed" VAL="2493" TYPE="uint32" UNITS="MHz" TN="682"
>> > TMAX="1200" DMAX="0" SLOPE="zero" SOURCE="gmond"/>
>> > ...
>> >
>> > Thanks,
>> > Dennis
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to