XPath, XQuery, and XSLT Functions

Access functions

Name Description
fn:node-name(node) Returns the node name of the argument node.
fn:nilled(node) Returns a boolean value indicating whether the argument node is refused.
fn:data(item.item,...) Accepts an item sequence and returns an atomic value sequence.
  • fn:base-uri()
  • fn:base-uri(node)
Returns the value of the base-uri attribute of the current node or the specified node.
fn:document-uri(node) Returns the value of the document-uri attribute of the specified node.

Error and trace functions

Name Description
  • fn:error()
  • fn:error(error)
  • fn:error(error,description)
  • fn:error(error,description,error-object)

Example: error(fn:QName('http://example.com/test', 'err:toohigh'), 'Error: Price is too high')

Result: Returns http://example.com/test#toohigh to the external processing environment along with the string "Error: Price is too high".

fn:trace(value,label) Used for debugging queries.

Functions related to numbers

Name Description
fn:number(arg)

Returns the numeric value of the argument. The argument can be a boolean value, a string, or a node set.

Example: number('100')

Result: 100

fn:abs(num)

Returns the absolute value of the argument.

Example: abs(3.14)

Result: 3.14

Example: abs(-3.14)

Result: 3.14

fn:ceiling(num)

Returns the smallest integer greater than the num parameter.

Example: ceiling(3.14)

Result: 4

fn:floor(num)

Returns the largest integer not greater than the num parameter.

Example: floor(3.14)

Result: 3

fn:round(num)

Rounds the num parameter to the nearest integer.

Example: round(3.14)

Result: 3

fn:round-half-to-even()

Example: round-half-to-even(0.5)

Result: 0

Example: round-half-to-even(1.5)

Result: 2

Example: round-half-to-even(2.5)

Result: 2

String functions

Name Description
fn:string(arg)

Returns the string value of the argument. The argument can be a number, a logical value, or a node set.

Example: string(314)

Result: "314"

fn:codepoints-to-string(int,int,...)

Returns a string from a sequence of code points.

Example: codepoints-to-string(84, 104, 233, 114, 232, 115, 101)

Result: 'Thérèse'

fn:string-to-codepoints(string)

Returns a sequence of code points from a string.

Example: string-to-codepoints("Thérèse")

Result: 84, 104, 233, 114, 232, 115, 101

fn:codepoint-equal(comp1,comp2) According to the Unicode code point comparison, if the value of comp1 is equal to the value of comp2, returns true. Otherwise, returns false. (http://www.w3.org/2005/02/xpath-functions/collation/codepoint)
  • fn:compare(comp1,comp2)
  • fn:compare(comp1,comp2,collation)

If comp1 is less than comp2, returns -1. If comp1 is equal to comp2, returns 0. If comp1 is greater than comp2, returns 1. (According to the used comparison rules).

Example: compare('ghi', 'ghi')

Result: 0

fn:concat(string,string,...)

Returns the concatenation of strings.

Example: concat('XPath ','is ','FUN!')

Result: 'XPath is FUN!'

fn:string-join((string,string,...),sep)

Uses the sep parameter as a separator to return the concatenated string of the string parameter.

Example: string-join(('We', 'are', 'having', 'fun!'), ' ')

Result: ' We are having fun! '

Example: string-join(('We', 'are', 'having', 'fun!'))

Result: 'Wearehavingfun!'

Example: string-join((), 'sep')

Result: ''

  • fn:substring(string,start,len)
  • fn:substring(string,start)

Returns a substring of the specified length starting from the start position. The index of the first character is 1. If the len parameter is omitted, it returns the substring from position start to the end of the string.

Example: substring('Beatles',1,4)

Result: 'Beat'

Example: substring('Beatles',2)

Result: 'eatles'

  • fn:string-length(string)
  • fn:string-length()

Returns the length of the specified string. If no string parameter is provided, it returns the length of the string value of the current node.

Example: string-length('Beatles')

Result: 7

  • fn:normalize-space(string)
  • fn:normalize-space()

Removes leading and trailing whitespace from the specified string, replaces all internal sequences of whitespace with a single space, and then returns the result. If no string parameter is provided, it processes the current node.

Example: normalize-space(' The   XML ')

Result: 'The XML'

fn:normalize-unicode() Executes Unicode normalization.
fn:upper-case(string)

Converts the string parameter to uppercase.

Example: upper-case('The XML')

Result: 'THE XML'

fn:lower-case(string)

Converts the string parameter to lowercase.

Example: lower-case('The XML')

Result: 'the xml'

fn:translate(string1,string2,string3)

Replaces string2 with string3 in string1.

Example: translate('12:30','30','45')

Result: '12:45'

Example: translate('12:30','03','54')

Result: '12:45'

Example: translate('12:30','0123','abcd')

Result: 'bc:da'

fn:escape-uri(stringURI,esc-res)

Example: escape-uri("http://example.com/test#car", true())

Result: "http%3A%2F%2Fexample.com%2Ftest#car"

Example: escape-uri("http://example.com/test#car", false())

Result: "http://example.com/test#car"

Example: escape-uri ("http://example.com/~bébé", false())

Result: "http://example.com/~b%C3%A9b%C3%A9"

fn:contains(string1,string2)

Returns true if string1 contains string2, otherwise returns false.

Example: contains('XML','XM')

Result: true

fn:starts-with(string1,string2)

Returns true if string1 starts with string2, otherwise returns false.

Example: starts-with('XML','X')

Result: true

fn:ends-with(string1,string2)

Returns true if string1 ends with string2, otherwise returns false.

Example: ends-with('XML','X')

Result: false

fn:substring-before(string1,string2)

Returns the substring that precedes the occurrence of string2 within string1.

Example: substring-before('12/10','/')

Result: '12'

fn:substring-after(string1,string2)

Returns the substring that follows the occurrence of string2 within string1.

Example: substring-after('12/10','/')

Result: '10'

fn:matches(string,pattern)

Returns true if the string parameter matches the specified pattern, otherwise returns false.

Example: matches("Merano", "ran")

Result: true

fn:replace(string,pattern,replace)

Replaces the specified pattern with the replace parameter and returns the result.

Example: replace("Bella Italia", "l", "*")

Result: 'Be**a Ita*ia'

Example: replace("Bella Italia", "l", "")

Result: 'Bea Itaia'

fn:tokenize(string,pattern)

Example: tokenize("XPath is fun", "\s+")

Result: ("XPath", "is", "fun")

Functions for anyURI

Name Description
fn:resolve-uri(relative,base)  

Functions related to boolean values

Name Description
fn:boolean(arg) Returns the boolean value of a number, string, or node set.
fn:not(arg)

First, the boolean() function restores the parameter to a boolean value. If the boolean value is false, it returns true; otherwise, it returns true.

Example: not(true())

Result: false

fn:true()

Returns the boolean value true.

Example: true()

Result: true

fn:false()

Returns the boolean value false.

Example: false()

Result: false

Functions related to duration, date, and time

Function to extract components of date, time, and duration

Name Description
fn:dateTime(date,time) Converts the parameter to a date and time.
fn:years-from-duration(datetimedur) Returns the integer part of the year parameter value, represented in standard lexical notation.
fn:months-from-duration(datetimedur) Returns the integer part of the month parameter value, represented in standard lexical notation.
fn:days-from-duration(datetimedur) Returns the integer part of the day parameter value, represented in standard lexical notation.
fn:hours-from-duration(datetimedur) Returns the integer representing the hours part of the parameter value, expressed in standard lexical notation.
fn:minutes-from-duration(datetimedur) Returns the integer representing the minutes part of the parameter value, expressed in standard lexical notation.
fn:seconds-from-duration(datetimedur) Returns the decimal number representing the minutes part of the parameter value, expressed in standard lexical notation.
fn:year-from-dateTime(datetime)

Returns the integer representing the year part of the local value of the parameter.

Example: year-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))

Result: 2005

fn:month-from-dateTime(datetime)

Returns the integer representing the month part of the local value of the parameter.

Example: month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))

Result: 01

fn:day-from-dateTime(datetime)

Returns the integer representing the day part of the local value of the parameter.

Example: day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))

Result: 10

fn:hours-from-dateTime(datetime)

Returns the integer representing the hours part of the local value of the parameter.

Example: hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))

Result: 12

fn:minutes-from-dateTime(datetime)

Returns the integer representing the minutes part of the local value of the parameter.

Example: minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))

Result: 30

fn:seconds-from-dateTime(datetime)

Returns the decimal number representing the seconds part of the local value of the parameter.

Example: seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10"))

Result: 0

fn:timezone-from-dateTime(datetime) Returns the timezone part of the parameter if it exists.
fn:year-from-date(date)

Returns the integer representing the year in the local value of the parameter.

Example: year-from-date(xs:date("2005-04-23"))

Result: 2005

fn:month-from-date(date)

Returns the integer representing the month in the local value of the parameter.

Example: month-from-date(xs:date("2005-04-23"))

Result: 4

fn:day-from-date(date)

Returns the integer representing the day in the local value of the parameter.

Example: day-from-date(xs:date("2005-04-23"))

Result: 23

fn:timezone-from-date(date) Returns the timezone part of the parameter if it exists.
fn:hours-from-time(time)

Returns the integer representing the hours part in the local value of the parameter.

Example: hours-from-time(xs:time("10:22:00"))

Result: 10

fn:minutes-from-time(time)

Returns the integer representing the minutes part in the local value of the parameter.

Example: minutes-from-time(xs:time("10:22:00"))

Result: 22

fn:seconds-from-time(time)

Returns the integer representing the seconds part in the local value of the parameter.

Example: seconds-from-time(xs:time("10:22:00"))

Result: 0

fn:timezone-from-time(time) Returns the timezone part of the parameter if it exists.
fn:adjust-dateTime-to-timezone(datetime,timezone) If the timezone parameter is empty, returns dateTime without timezone. Otherwise, returns dateTime with timezone.
fn:adjust-date-to-timezone(date,timezone) If the timezone parameter is empty, returns date without timezone. Otherwise, returns date with timezone.
fn:adjust-time-to-timezone(time,timezone) If the timezone parameter is empty, returns time without timezone. Otherwise, returns time with timezone.

Functions related to QNames

Name Description
fn:QName()  
fn:local-name-from-QName()  
fn:namespace-uri-from-QName()  
fn:namespace-uri-for-prefix()  
fn:in-scope-prefixes()  
fn:resolve-QName()  

Functions related to nodes

Name Description
  • fn:name()
  • fn:name(nodeset)
Returns the name of the current node or the first node in the specified node set.
  • fn:local-name()
  • fn:local-name(nodeset)
Returns the name of the current node or the first node in the specified node set without the namespace prefix.
  • fn:namespace-uri()
  • fn:namespace-uri(nodeset)
Returns the namespace URI of the current node or the first node in the specified node set.
fn:lang(lang)

Returns true if the language of the current node matches the specified language.

Example: Lang("en") is true for <p xml:lang="en">...</p>

Example: Lang("de") is false for <p xml:lang="en">...</p>

  • fn:root()
  • fn:root(node)
Returns the root node of the node tree belonging to the current node or the specified node. It is usually the document node.

Functions related to sequences

General functions

Name Description
fn:index-of((item,item,...),searchitem)

Returns the positions in the item sequence that are equal to the searchitem parameter.

Example: index-of ((15, 40, 25, 40, 10), 40)

Result: (2, 4)

Example: index-of (("a", "dog", "and", "a", "duck"), "a")

Result (1, 4)

Example: index-of ((15, 40, 25, 40, 10), 18)

Result: ()

fn:remove((item,item,...),position)

Returns a new sequence constructed by the item parameter, while deleting the item at the specified position.

Example: remove(("ab", "cd", "ef"), 0)

Result: ("ab", "cd", "ef")

Example: remove(("ab", "cd", "ef"), 1)

Result: ("cd", "ef")

Example: remove(("ab", "cd", "ef"), 4)

Result: ("ab", "cd", "ef")

fn:empty(item,item,...)

Returns true if the parameter value is an empty sequence, otherwise returns false.

Example: empty(remove(("ab", "cd"), 1))

Result: false

fn:exists(item,item,...)

Returns true if the parameter value is not an empty sequence, otherwise returns false.

Example: exists(remove(("ab"), 1))

Result: false

fn:distinct-values((item,item,...),collation)

Returns unique distinct values.

Example: distinct-values((1, 2, 3, 1, 2))

Result: (1, 2, 3)

fn:insert-before((item,item,...),pos,inserts)

Returns a new sequence constructed by the item parameter - inserting the value of the inserts parameter at the position specified by the pos parameter.

Example: insert-before(("ab", "cd"), 0, "gh")

Result: ("gh", "ab", "cd")

Example: insert-before(("ab", "cd"), 1, "gh")

Result: ("gh", "ab", "cd")

Example: insert-before(("ab", "cd"), 2, "gh")

Result: ("ab", "gh", "cd")

Example: insert-before(("ab", "cd"), 5, "gh")

Result: ("ab", "cd", "gh")

fn:reverse((item,item,...))

Returns the reversed order of specified items.

Example: reverse(("ab", "cd", "ef"))

Result: ("ef", "cd", "ab")

Example: reverse(("ab"))

Result: ("ab")

fn:subsequence((item,item,...),start,len)

Returns a sequence of items starting from the position specified by the start parameter and with a length specified by the len parameter. The position of the first item is 1.

Example: subsequence(($item1, $item2, $item3,...), 3)

Result: ($item3, ...)

Example: subsequence(($item1, $item2, $item3, ...), 2, 2)

Result: ($item2, $item3)

fn:unordered((item,item,...)) Returns items in the order determined by the implementation.

Function to test the sequence capacity

Name Description
fn:zero-or-one(item,item,...) Returns the argument if it contains zero or one item, otherwise generates an error.
fn:one-or-more(item,item,...) Returns the argument if it contains one or more items, otherwise generates an error.
fn:exactly-one(item,item,...) Returns the argument if it contains a single item, otherwise generates an error.

Equals, Union, Intersection and Except

Name Description
fn:deep-equal(param1,param2,collation) Returns true if param1 and param2 are equal to each other (deep-equal), otherwise returns false.

Aggregate function

Name Description
fn:count((item,item,...)) Returns the number of nodes.
fn:avg((arg,arg,...))

Returns the average of the values of the arguments.

Example: avg((1,2,3))

Result: 2

fn:max((arg,arg,...))

Returns the argument that is greater than the other parameters.

Example: max((1,2,3))

Result: 3

Example: max(('a', 'k'))

Result: 'k'

fn:min((arg,arg,...))

Returns the argument that is less than the other parameters.

Example: min((1,2,3))

Result: 1

Example: min(('a', 'k'))

Result: 'a'

fn:sum(arg,arg,...) Returns the sum of the values of each node in the specified node set.

The function to generate a sequence

Name Description
fn:id((string,string,...),node) Returns a sequence of element nodes that have an ID value equal to the value of one or more of the values specified in the string argument
fn:idref((string,string,...),node) Returns a sequence of element or attribute nodes that have an IDREF value equal to the value of one or more of the values specified in the string argument
fn:doc(URI)  
fn:doc-available(URI) If the doc() function returns a document node, then return true, otherwise return false.
  • fn:collection()
  • fn:collection(string)
 

Context Functions

Name Description
fn:position()

Return the index position of the current node being processed.

Example: //book[position()<=3]

Result: Select the first three book elements

fn:last()

Return the number of items in the list of nodes being processed.

Example: //book[last()]

Result: Select the last book element

fn:current-dateTime() Return the current dateTime (with timezone).
fn:current-date() Return the current date (with timezone).
fn:current-time() Return the current time (with timezone).
fn:implicit-timezone() Return the value of the implicit timezone.
fn:default-collation() Return the value of the default collation.
fn:static-base-uri() Return the value of base-uri.