## Name

`sum()`

Converts all nodes in the argument node-set to numbers, and then returns the sum of all of those numbers.

## Syntax

[1.0]number`sum(`

`node-set`

`)`

[2.0]xs:anyAtomicType`sum(`

`xs:anyAtomicType`

`)`

[2.0]xs:anyAtomicType`sum(`

,`xs:anyAtomicType`

`$empty as xs:anyAtomicType`

`)`

## Inputs

*[1.0]* A node-set. Any node in the
node-set that is not a number is converted to a number as if it
were passed to the `number()`

function, after which the numeric values of all of the nodes are
summed.

*[2.0]* A sequence of atomic values, plus
an optional value that is returned when the first argument to
`sum()`

is the empty
sequence.

## Output

*[1.0]* The sum of the numeric values of
all of the nodes in the argument node-set. If any node in the
argument node-set cannot be converted to a number, the `sum()`

function returns `NaN`

.

*[2.0]* Given a sequence of numeric
values, `sum()`

returns the
sum of those values. Given a sequence of durations, `sum()`

returns the sum of those
durations. As you’d expect from XSLT 2.0, there are some
complications to consider:

To calculate the sum of a sequence of durations, the durations must all be

`xs:dayTimeDuration`

s, or they must all be`xs:yearMonthDuration`

s. You can’t mix the two types of durations; if you do, the XSLT processor raises an error.If any of the items in the sequence are of type

`xs:untypedAtomic`

, the XSLT processor attempts to cast it to`xs:double`

. If it can’t be converted to an`xs:double`

, the XSLT processor raises an error.If you pass a nonempty sequence to

`sum()`

and the sum is`0`

, the function ...

Get *XSLT, 2nd Edition* now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.