Icecast содержит реализацию XSLT на основе libxslt из xmlsoft.
Я хочу знать, поддерживает ли он функцию node-set(), предпочтительно таким образом, который работает и для других веб-сред:
К сожалению, XSLT-процессор в icecast доступен через Интернет только через веб-интерфейс процесса icecast (поэтому никакие xsltproc в командной строке). Что еще хуже: журналирование ошибок XSLT ограничено (когда вы делаете что-то неправильно, процесс icecast часто просто умирает).
Я использую icecast 2.3.2, так как это последняя сборка на базе Windows (есть пока нет сборки 2.3.3 для Windows), в которой libxslt.dll датирована 2008 годом. нет номера версии в DLL, лучшее, что я могу предоставить, это (см. код XSLT внизу):
Version: 1.0
Vendor: libxslt
Vendor URL: http://xmlsoft.org/XSLT/
Я попытался запустить определение набора узлов, упомянутое в блог Дэвида Карлайла в статье Функция набора узлов EXSLT, на которую указывает "Как использовать функцию набора узлов независимо от платформы?".
Из вывода я думаю, что это не удается:
icemaster@localhost972990localhost00EarthIcecast 2.3.2Sun, 23 Jun 2013 20:02:19 W. Europe Daylight Time202200ice-samplerate=44100;ice-bitrate=64;ice-channels=264StationGenre6424410000http://localhost:8000.....
Что лучше всего узнать через XSL-файл в веб-интерфейсе?
Скрипт версии:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
Version: <xsl:value-of select="system-property('xsl:version')" />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" />
</xsl:template>
</xsl:stylesheet>
сценарий набора узлов, который я пробовал:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="exslt msxsl">
<xsl:output
omit-xml-declaration="no"
method="html"
indent="yes"
encoding="UTF-8" />
<msxsl:script language="JScript" implements-prefix="exslt">
this['node-set'] = function (x) {
return x;
}
</msxsl:script>
<xsl:variable name="x">
<y/>
</xsl:variable>
<xsl:template match="x">
<html>
<head><title>test exslt node set</title></head>
<body>
<xsl:apply-templates select="exslt:node-set($x)/*"/>
</body>
</html>
</xsl:template>
<xsl:template match="y">
<p>node set!</p>
</xsl:template>
</xsl:stylesheet>