Great, thanks for the feedback.  Will try it tomorrow.

On Thursday, July 24, 2014 7:22:35 PM UTC-4, Stan wrote:
>
>
> On 07/24/2014 02:45 PM, Adrian O'Sullivan wrote: 
> > I'm really struggling to understand how to parse XML in Clojure. 
> > 
> > Here's my xml: 
> > 
> > <javancss> 
> >    <function> 
> > <name>java.complexity.HelloWorld.notcomplex()</name> 
> >       <ncss>2</ncss> 
> >       <ccn>1</ccn> 
> >       <javadocs>0</javadocs> 
> >     </function> 
> >     <function> 
> > <name>java.complexity.HelloWorld.complex(int)</name> 
> >       <ncss>4</ncss> 
> >       <ccn>2</ccn> 
> >       <javadocs>0</javadocs> 
> >     </function> 
> > ... etc 
> > 
> > I can do (xml-seq (xml/parse .. )) on this, or ( zip/xml-zip 
> >  (xml/parse ... ), I don't mind which. 
> > 
> > My task is to extract all the function elements where the ncss value > 
> > 3, then sum the ccn values of the remaining elements.  I simply cannot 
> > figure out how to do this.  All I can do is extract text of particular 
> > elements, e.g. 
> > 
> > (apply + (map read-string (zf/xml-> ncss-zip :functions :function :ccn 
> >  zf/text))) 
> > 
> > If anyone can help out, it would be much appreciated. 
> > -- 
>
> Parsing XML without using XPath is (IMHO) a fool's errand... 
>
> Use the excellent clojure saxon library https://github.com/pjt/saxon   
> [clojure-saxon "0.9.4"] 
>
> (require '[saxon :as sax]) 
>
> (def xml (sax/compile-xml "<javancss> 
>     <function> 
> <name>java.complexity.HelloWorld.notcomplex()</name> 
>        <ncss>2</ncss> 
>        <ccn>1</ccn> 
>        <javadocs>0</javadocs> 
>      </function> 
>      <function> 
> <name>java.complexity.HelloWorld.complex(int)</name> 
>        <ncss>4</ncss> 
>        <ccn>2</ccn> 
>        <javadocs>0</javadocs> 
>      </function> ...")) 
>
> (def sum-ncss (sax/compile-xquery "sum(//function[ncss<=3]/ncss")))   
> ;;creates a function 
>
> (sum-ncss xml) 
>
> will return what you're looking for. 
>
> Hope this helps, 
>
> StanD. 
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to