myxsl.net implements the following XPath 2.0 and 3.0 functions for XslCompiledTransform (which currently supports XPath 1.0 only).
<xsl:variable name="numbers-rtf"> <num>1</num> <num>15</num> <num>48</num> </xsl:variable> <xsl:value-of select="fn:avg(exsl:node-set($numbers-rtf)/*)"/>returns
21.333333333333332fn:base-uri(document('')) returns file:///C:/Data/Sites/net.myxsl/xslcompiledtransform/extensions/w3c.xpath.xsl<xsl:variable name="schema-rtf"> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="a" type="xs:integer"/> </xs:schema> </xsl:variable> <xsl:variable name="doc-rtf"> <a>5</a> </xsl:variable> <xsl:variable name="validated-doc" select="ext:validate(exsl:node-set($doc-rtf), exsl:node-set($schema-rtf))"/> <xsl:value-of select="exsl:object-type(fn:data($validated-doc/a))"/>returns
number<xsl:variable name="attendees-rtf"> <name last="Parker" first="Peter"/> <name last="Barker" first="Bob"/> <name last="Parker" first="Peter"/> </xsl:variable> <xsl:variable name="attendees" select="exsl:node-set($attendees-rtf)"/> <xsl:value-of select="fn:deep-equal($attendees/name[1], $attendees/name[3])"/>returns
true<xsl:variable name="numbers-rtf"> <num>2</num> <num>2</num> <num>5</num> </xsl:variable> <xsl:value-of select="fn:string-join(fn:distinct-values(exsl:node-set($numbers-rtf)/*), ', ')"/>returns
2, 5fn:document-uri(document('')) returns file:///C:/Data/Sites/net.myxsl/xslcompiledtransform/extensions/w3c.xpath.xslfn:string-join(fn:in-scope-prefixes(document('')/*), ', ') returns xml, exsl, xsl, , xs, xsi, fn, math, ext, msxsl, app<xsl:variable name="numbers-rtf"> <num>1</num> <num>15</num> <num>48</num> </xsl:variable> <xsl:value-of select="fn:max(exsl:node-set($numbers-rtf)/*)"/>returns
48<xsl:variable name="numbers-rtf"> <num>1</num> <num>15</num> <num>48</num> </xsl:variable> <xsl:value-of select="fn:min(exsl:node-set($numbers-rtf)/*)"/>returns
1fn:namespace-uri-for-prefix('xsl', document('')/*) returns http://www.w3.org/1999/XSL/Transform<xsl:variable name="schema-rtf"> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="a" nillable="true"/> </xs:schema> </xsl:variable> <xsl:variable name="doc-rtf"> <a xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> </xsl:variable> <xsl:variable name="validated-doc" select="ext:validate(exsl:node-set($doc-rtf), exsl:node-set($schema-rtf))"/> <xsl:value-of select="fn:nilled($validated-doc/a)"/>returns
truefn:string-join(fn:one-or-more(document('')/*/@*), ', ') returns 1.0, exsl fn xs xsi math msxsl app extfn:path(document('')/*/@version) returns /"http://www.w3.org/1999/XSL/Transform":stylesheet[1]/@versionfn:resolve-uri('/foo', 'http://example.com/bar') returns http://example.com/foo<xsl:variable name="numbers-rtf"> <num>1</num> <num>15</num> <num>48</num> </xsl:variable> <xsl:value-of select="fn:root(exsl:node-set($numbers-rtf)/*[1])"/>returns
11548<xsl:variable name="items-rtf"> <a>1</a> <xsl:text>text</xsl:text> <b>2</b> </xsl:variable> <xsl:variable name="serialization-parameters-rtf"> <output:serialization-parameters xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"> <output:method value="text"/> </output:serialization-parameters> </xsl:variable> <xsl:value-of select="fn:serialize(exsl:node-set($items-rtf)/node(), exsl:node-set($serialization-parameters-rtf))"/>returns
1text2fn:static-base-uri() returns file:///C:/Data/Sites/net.myxsl/xslcompiledtransform/extensions/w3c.xpath.xslfn:string-join(document('')/*/@*, ', ') returns 1.0, exsl fn xs xsi math msxsl app ext<xsl:variable name="numbers-rtf"> <num>1</num> <num>15</num> <num>48</num> </xsl:variable> <xsl:value-of select="fn:subsequence(exsl:node-set($numbers-rtf)/*, 2, 1)"/>returns
48fn:string-join(fn:tokenize('2006-12-25T12:15:00', '[\-T:]'), ', ') returns 2006, 25, 00, 12, 15, 12