Looking at the source of clojure.data.zip, it looks like something like:

(xml-> x :a (seq-test [(tag= :b1) (tag= :b3)]) :c)

(untested) might work?

http://clojure.github.com/data.zip/


On Mon, Nov 5, 2012 at 10:38 AM, Stefan Kamphausen <ska2...@gmail.com> wrote:
> Hi,
>
> AFAIK the currently supposed way of parsing XML with Clojure is to use a
> combination of clojure.xml, clojure.zip, data.zip and data.zip.xml.  Please
> correct me if I'm wrong.
>
> I am trying to extract the equivalent of a union of nodesets from an XML
> file (speaking in XPath terms).
>
> Example:
>
> input.xml:
>
> <root>
>   <a>
>     <b1>
>       <c>C1</c>
>       <c>C2</c>
>     </b1>
>     <b2>
>       <c>C3</c>
>       <c>C4</c>
>     </b2>
>     <b3>
>       <c>C5</c>
>       <c>C6</c>
>     </b3>
>   </a>
> </root>
>
> Suppose I have an array (or whatever) with the allowed b-tags, e.g. b1 and
> b3.  Now I want to extract all c-tags underneath b1 and b3 but skip those
> under b2.
>
> Using clojure.xml/parse, clojure.zip/xml-zip and data.zip.xml/xml-> I can
> easily extract certain nodes but I have not found a way to extract such a
> union, yet.
>
> A rather lispy approach would be using or in a manner similar to this:
>
> (def x (clojure.zip/xml-zip (clojure.xml/parse "/path/to/input.xml")))
> (clojure.data.zip.xml/xml-> x :a (or :b1 :b3) :c)
>
> And I did not yet understand how to write my own predicates there.
>
> Any pointers?
>
>
> Kind regards,
> stefan
>
> --
> 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