This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: newbie: xsl:key and summation of substrings


>Despite reading the faqs, I am still banging my head on basic summation and
>would appreciate help.
>
>I have a repeating element that looks something like this:
>           <disk>
>     <freespace>1235 MB</freespace>
>           </disk>
>           <disk>
>     <freespace>40 MB</freespace>
>           </disk>
>           <disk>
>     <freespace>75  MB</freespace>
>           </disk>
>
>
>I want to sum the "freespace", but sum(//disk/freespace) won't work because
>freespace is not a number due to the trailing "MB".

The short answer is, you can't.  To use sum() the values have to be
present directly in the input, there is no way to preprocess them.

There are three longer answers:

1.  Use a recursive template.  This can be done with pure XSLT 1.0.
2.  Construct a temporary tree in a variable containing preprocessed
values, and then use sum() on that.  You will need to use the
node-set() extension function which most processors have.
3.  Do the transformation in two steps: step one is turn the document
into something sensible.

Be careful though - is it *always* MB or will you sometimes get KB or
GB or even TB?

>I can not influence the content of this source document.

I've lost count of the number of times I have seen this, most commonly
with grouping type questions.  Anybody got a theory as to why this
happens?  There must be thousands of person-hours being wasted.

Regards,
Trevor Nash
--
Traditional training & distance learning,
Consultancy by email

Melvaig Software Engineering Limited
voice:     +44 (0) 1445 771 271 
email:     tcn@melvaig.co.uk

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]