Hi Linus, Zippers and their associated helpers are woefully undocumented, so I'm not surprised you fell into the swamp.
I think that the help you're looking for can be found in the clojure.data contrib project (see https://github.com/clojure/data.zip for the source and http://clojure.github.com/data.zip for the autodoc). Using that, the xpathy thing you're looking for is something like this: (ns play.xml-example (:require [clojure.zip :as zip] [clojure.data.zip :as zf] [clojure.xml :as xml]) (:use clojure.data.zip.xml)) (def mz (zip/xml-zip (xml/parse "dataabove.xml"))) (defn get-all-dimensions [] (doseq [id (xml-> mz zf/descendants (attr= :id "2") zf/children :e (attr :id))] (println (apply str id)))) Note that I had to make a couple of fixes to the above XML to make it right. I hope that's useful! Tom On Dec 12, 7:06 am, Linus Ericsson <oscarlinuserics...@gmail.com> wrote: > Hello! > > What's the clever way to read the E-tags "thisone" and "andthis" in the > XML-file below given I don't know their id on beforehand? > > <a> > <b>bla bla</b> > <b>bla bla</b> > <c id="wanted"> > <d id="1"> > <e id="notthisone"/></d> > <d id="2"> > <e id="thisone"/> > <e id="andthis"/></d> > <d id="3"> > <e id="not-intresting"></d> > </a> > > My solution so far would be something like > > (def mz (zip/xml-zip (xml/parse "dataabove.xml"))) > > (defn get-all-dimensions [] > (filter #(and (= "2" (:id %)) (= :e (:tag %))) (zip/children mz)))) > > but I'm looking for some descending solution > > (-> mz > (zip/down a) > (zip/down c :where (= :id "wanted")) > (zip/down d :where (= :id 2)) > zip/children) > > (an xpath-like solution would most awesome) > > According to it's own page Enlive is not very good for xml and I cannot > figure out the way to dynamically walk with zippers (like "go into the tag > :d with id=..."). Would Enlive work for my needs here? > > When I got this sorted out I will try my best to add some examples on > clojuredocs.org, zippers is good but I don't know if it's for everything. > > /Linus -- 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