fn:string-join

Returns a string created by concatenating the items in a sequence, with a defined separator between adjacent items.

Signatures

fn:string-join($arg1 as xs:anyAtomicType*) as xs:string
fn:string-join(
    $arg1 as xs:anyAtomicType*, 
    $arg2 as xs:string
) as xs:string

Properties

This function is deterministic, context-independent, and focus-independent.

Rules

The effect of calling the single-argument version of this function is the same as calling the two-argument version with $arg2 set to a zero-length string.

The function returns an xs:string created by casting each item in the sequence $arg1 to an xs:string, and then concatenating the result strings in order, using the value of $arg2 as a separator between adjacent strings. If the value of $arg2 is the zero-length string, then the members of $arg1 are concatenated without a separator.

Notes

If the value of $arg1 is the empty sequence, the function returns the zero-length string.

Examples

The expression fn:string-join(1 to 9) returns "123456789".

The expression fn:string-join(('Now', 'is', 'the', 'time', '...'), ' ') returns "Now is the time ...".

The expression fn:string-join(('Blow, ', 'blow, ', 'thou ', 'winter ', 'wind!'), '') returns "Blow, blow, thou winter wind!".

The expression fn:string-join((), 'separator') returns "".

The expression fn:string-join(1 to 5, ', ') returns "1, 2, 3, 4, 5".

let $doc := <doc>
  <chap>
    <section xml:id="xyz"/>
  </chap>
</doc>

The expression $doc//@xml:id ! fn:string-join((node-name(), '="', ., '"')) returns 'xml:id="xyz"'.

The expression $doc//section ! fn:string-join(ancestor-or-self::*/name(), '/') returns "doc/chap/section".