Subject: Re: How to perform calculation? From: Brandon Ibach <bibach@xxxxxxxxxxxxxx> Date: Tue, 16 May 2000 13:30:01 -0500 |
Quoting Philippe CASIDY <pcasidy@xxxxxxxxxxx>: > I am wondering how I could do some calculations on values inside my > documents. I am using JADE and TeX backend. > > <Test> > <DETAILS> > <LINE> > <DESC>Fisrt Value > <QUANTITY>15 > </LINE> > <LINE> > <DESC>Second Value > <QUANTITY>1 > </LINE> > </DETAILS> > </Test> > > In my DSSSL, I would like to sum the values of QUANTITY and to have this > result inserted in the output. > While processing the <details> node: (node-list-reduce (select-elements (descendants (current-node)) "QUANTITY") (lambda (o n) (+ o (or (string->number (data n)) 0))) 0) If your version of [Open]Jade doesn't have (node-list-reduce) built in, include this definition (lifted from the DSSSL standard): (define (node-list-reduce nl combine init) (if (node-list-empty? nl) init (node-list-reduce (node-list-rest nl) combine (combine init (node-list-first nl))))) In case you're not familiar with (node-list-reduce), here's what's happening. First, we get a node-list, starting with the descendants of the current-node, which would be everything inside of <details>. We filter that down to just the <quantity> elements, and pass the list into (node-list-reduce), which applies its second argument, a procedure, to its third argument (in this case, 0) and the first node in our list. The result becomes the new value for the third argument and the procedure is repeated with the next node in the list until there are no more nodes. The procedure we give to (node-list-reduce) simply extracts the contents (data n) of the node, converts it to a number, substituting 0 if the conversion fails (returning #f), and adds it to the running total, returning the result. I didn't actually test this, so if it doesn't work, let me know and I'll fix it. :) -Brandon :) DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
How to perform calculation?, Philippe CASIDY | Thread | Re: How to perform calculation?, Philippe CASIDY |
How to perform calculation?, Philippe CASIDY | Date | Re: HTML -> RTF, Holger Klawitter |
Month |