Short answer
libxslt in icecast supports the xt:node-set() function.
Underneath it is implemented in by the xsltFunctionNodeSet() function.
Generic answer
I created a solution, based on the CSTUG bibliography XSLT using the function system-property.
Please comment if this is indeed the correct way to do this.
The CSTUG code handles these node-set() functions:
- exslt:node-set()
- msxml:node-set()
- xalanc:nodeset()
I added support for these as well:
- xt:node-set()
- saxon6:node-set()
Output from icecast:
Version: 1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/
node-set(): xt:node-set()
XSLT used:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:xalanc="http://xml.apache.org/xalanc"
xmlns:xt="http://www.jclark.com/xt"
xmlns:saxon6="http://icl.com/saxon"
extension-element-prefixes="exslt msxml xalanc xt saxon6"
exclude-result-prefixes="exslt msxml xalanc xt saxon6"
>
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:text>
Version: </xsl:text>
<xsl:value-of select="system-property('xsl:version')" />
<xsl:text>
Vendor: </xsl:text>
<xsl:value-of select="system-property('xsl:vendor')" />
<xsl:text>
Vendor URL: </xsl:text>
<xsl:value-of select="system-property('xsl:vendor-url')" />
<!--
Prefixes used for node-set()
exslt: EXSLT aware processors (Saxon, xsltproc, Xalan-J, jd.xslt, 4XSLT)
msxml: MSXML
xalanc: Xalan-C, Xalan-J 2.6.x
xt: XT, libxslt
saxon6: Saxon 6
-->
<xsl:text>
node-set(): </xsl:text>
<xsl:choose>
<xsl:when test="function-available('exslt:node-set')">
<xsl:text>exslt:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('msxml:node-set')">
<xsl:text>msxml:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('xalanc:nodeset')">
<xsl:text>xalanc:nodeset()</xsl:text>
</xsl:when>
<xsl:when test="function-available('xt:node-set')">
<xsl:text>xt:node-set()</xsl:text>
</xsl:when>
<xsl:when test="function-available('saxon6:node-set')">
<xsl:text>saxon6:node-set()</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>EXSLT:node-set not found!</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>