xsl-list
[Top] [All Lists]

RE: sum() applied to a product

2004-06-30 02:03:35
-----------------------
Okay.. I told someone I could do this in a simple xpath expression

<?xml version="1.0"?>
<a>
  <b>
    <c>2</c>
    <d>4</d>
  </b>
  <b>
    <c>3</c>
    <d>6</d>
  </b>
</a>

Where the xpath was to return (2*4) + (3*6) = 26
I made several attempts with xpath's sum() function (using 1.0) and 
couldn't get it.

Assuming that the number of <b> elements is variable, you can't do this
directly in XPath 1.0. 

In 2.0 it's easy: sum(for $b in b return $b/c * $b/d)

In 1.0 your options are (a) write a recursive template that operates over
the list of b elements, or (b) use a two-phase transformation in which the
first phase computes the products and the second phase computes the sum. You
could also use Dimitre Novatchev's FXSL library, which simulates
higher-order functions using pure XSLT 1.0.

Michael Kay



<Prev in Thread] Current Thread [Next in Thread>